integer与int区别以及integer.values()方法详解
声明:本文为博主转载文章,原文地址见文末。
知识点1:integer和int的区别
/*
* int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,
* 而Integer的默认值为null
* ,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别
* ,则只能使用Integer
* 。在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时
* ,结果为0,所以,int不适合作为web层的表单数据的类型。
* 在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的
* ,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。
* 另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。
*/
知识点2:integer.values()方法详解
1
2
3
|
System.out.println(Integer.valueOf( "127" )==Integer.valueOf( "127" ));
System.out.println(Integer.valueOf( "128" )==Integer.valueOf( "128" ));
System.out.println(Integer.parseInt( "128" )==Integer.valueOf( "128" ));
|
为什么第一个判断返回了true
而第二个判断返回了false
?127
和128
有什么我不知道的区别吗?(当然除了127
小于128
…)
还有,为什么第三个判断返回了true
?
我看了另一个相关提问的回答,但是我还是不知道它们什么时候返回true还有为什么第二个判断返回false
。
回答#1:
Integer.valueOf(String)
确有一个不同寻常的行为。
valueOf
会返回一个Integer
(整型)对象,当被处理的字符串在-128
和127
(包含边界)之间时,返回的对象是预先缓存的。这就是为什么第一行的调用会返回true
-127
这个整型对象是被缓存的(所以两次valueOf
返回的是同一个对象)——第二行的调用返回false
是因为128
没有被缓存,所以每次调用,都会生成一个新的整型对象,
因此两个128
整型对象是不同的对象。
重要的是你要知道在上面的比较中,你实际进行比较的是integer.valueOf
返回的对象引用,所以当你比较缓存外的整型对象时,相等的判断不会返回true
,就算你
传个valueOf
的值是相等的也没用。(就像第二行中Integer.valueOf(128)==Integer.valueOf(128))
。想让这个判断返回true
,你需要使用equals()
方法。
parseInt()
返回的不是整型对象,而是一个int
型基础元素。这就是为什么最后一个判断会返回true
,第三行的判断中,在判断相等时,实际比较的是128 == 128
,
所以它必然是相等的。
再来说说第三种比较中的一点区别,使得它的结果与第二种比较不一样了:
一个unboxing conversion(一种比较时的转换,把对对象的引用转换为其对应的原子类型)在第三行的比较中发生了。因为比较操作符使用了==
同时等号的两边
存在一个int
型和一个Integer
对象的引用。这样的话,等号右边返回的Integer
对象被进一步转换成了int
数值,才与左边进行相等判断。
所以在转换完成后,你实际比较的是两个原子整型数值。这种转换正是你在比较两个原子类型时所期待看到的那样,所以你最终比较了128
等于128
。
回答#2:
Integer
类有一个静态缓存,存储了256个特殊的Integer
对象——每个对象分别对应`-128 和127之间的一个值。
有了这个概念,就可以知道上面三行代码之间的区别。
1 |
new Integer(123); |
显示创建了一个新的Integer
对象。
1 |
Integer.parseInt( "123" );
|
解析完字符串后返回一个int
值。
1 |
Integer.valueOf( "123" );
|
这种情况比其他的要更复杂一些。首先进行了字符串解析,然后如果解析的值位于-128
和127
之间,就会从静态缓存中返回对象。如果超出了这个范围,就会调用
Integer()
方法并将解析的值作为参数传入,得到一个新的对象。
现在,让我们看一下问题中的3个表达式。
1 |
Integer.valueOf( "127" )==Integer.valueOf( "127" );
|
上面的表达式返回true
,因为Integer
的值从静态缓存中取了2次,表达式返回了对象与自己比较的结果。因为只有一个Integer对象,所以返回结果为true
。
1 |
Integer.valueOf( "128" )==Integer.valueOf( "128" );
|
上面的表达式返回false
,因为128
没有存在静态缓冲区。所以每次在判断相等时等式两边都会创建新的Integer
对象。由于两个Integer
对象不同,所以==
只有等式
两边代表同一个对象时才会返回true
。因此,上面的等式返回false
。
1 |
Integer.parseInt( "128" )==Integer.valueOf( "128" );
|
上面的表达式比较的是左边的原始int
值128
与右边新创建的Integer
对象。但是因为int
和Integer
之间比较是没有意义的,所以Java在进行比较前会将Integer
自动拆箱,所以最后进行的是int
和int
值之间的比较。由于128
和自己相等,所以返回true
。
Atas ialah kandungan terperinci integer与int区别以及integer.values()方法详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perbezaan antara multithreading dan asynchronous adalah bahawa multithreading melaksanakan pelbagai benang pada masa yang sama, sementara secara tidak sengaja melakukan operasi tanpa menyekat benang semasa. Multithreading digunakan untuk tugas-tugas yang berintensifkan, sementara asynchronously digunakan untuk interaksi pengguna. Kelebihan multi-threading adalah untuk meningkatkan prestasi pengkomputeran, sementara kelebihan asynchronous adalah untuk tidak menghalang benang UI. Memilih multithreading atau asynchronous bergantung kepada sifat tugas: tugas-tugas intensif pengiraan menggunakan multithreading, tugas yang berinteraksi dengan sumber luaran dan perlu menyimpan respons UI menggunakan asynchronous.

Tiada fungsi jumlah terbina dalam dalam bahasa C, jadi ia perlu ditulis sendiri. Jumlah boleh dicapai dengan melintasi unsur -unsur array dan terkumpul: Versi gelung: SUM dikira menggunakan panjang gelung dan panjang. Versi Pointer: Gunakan petunjuk untuk menunjuk kepada unsur-unsur array, dan penjumlahan yang cekap dicapai melalui penunjuk diri sendiri. Secara dinamik memperuntukkan versi Array: Perlawanan secara dinamik dan uruskan memori sendiri, memastikan memori yang diperuntukkan dibebaskan untuk mengelakkan kebocoran ingatan.

Dalam bahasa C, perbezaan utama antara char dan wchar_t adalah pengekodan aksara: char menggunakan ASCII atau memanjangkan ASCII, WCHAR_T menggunakan unicode; Char mengambil 1-2 bait, wchar_t mengambil 2-4 bait; Char sesuai untuk teks bahasa Inggeris, WCHAR_T sesuai untuk teks berbilang bahasa; CHAR disokong secara meluas, WCHAR_T bergantung kepada sama ada penyusun dan sistem operasi menyokong Unicode; Char adalah terhad dalam pelbagai watak, WCHAR_T mempunyai pelbagai watak yang lebih besar, dan fungsi khas digunakan untuk operasi aritmetik.

Permohonan yang menukarkan XML terus ke PDF tidak dapat dijumpai kerana mereka adalah dua format yang berbeza. XML digunakan untuk menyimpan data, manakala PDF digunakan untuk memaparkan dokumen. Untuk melengkapkan transformasi, anda boleh menggunakan bahasa pengaturcaraan dan perpustakaan seperti Python dan ReportLab untuk menghuraikan data XML dan menghasilkan dokumen PDF.

Fungsi bahasa C adalah asas untuk modularization kod dan bangunan program. Mereka terdiri daripada pengisytiharan (tajuk fungsi) dan definisi (badan fungsi). Bahasa C menggunakan nilai untuk lulus parameter secara lalai, tetapi pembolehubah luaran juga boleh diubahsuai menggunakan lulus alamat. Fungsi boleh mempunyai atau tidak mempunyai nilai pulangan, dan jenis nilai pulangan mestilah selaras dengan perisytiharan. Penamaan fungsi harus jelas dan mudah difahami, menggunakan nomenclature unta atau garis bawah. Ikuti prinsip tanggungjawab tunggal dan pastikan kesederhanaan fungsi untuk meningkatkan kebolehkerjaan dan kebolehbacaan.

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Penjelasan terperinci mengenai kaedah carian XPath di bawah nod Dom dalam JavaScript, kita sering perlu mencari nod tertentu dari pokok Dom berdasarkan ekspresi XPath. Sekiranya anda perlu ...

Walaupun C dan C# mempunyai persamaan, mereka sama sekali berbeza: C adalah pengurusan memori yang berorientasikan proses, dan bahasa yang bergantung kepada platform yang digunakan untuk pengaturcaraan sistem; C# adalah bahasa berorientasikan objek, sampah, dan bahasa bebas platform yang digunakan untuk desktop, aplikasi web dan pembangunan permainan.
