Java中int和Integer的區別


1、 int是基本數據類型,int變量存儲的是數值。Integer是引用類型,實際是一個對象,Integer存儲的是引用對象的地址。

2、

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
因為new生成的是兩個對象,其內存地址不同

3、int和Integer所占內存比較:

Integer對象會占用更多的內存。Integer是一個對象,需要存儲對象的元數據。但是int是一個原始類型的數據,所以占用的空間更少。

4、非new生成的Integer變量與new Integer()生成的變量比較,結果為false。

/** * 比較非new生成的Integer變量與new生成的Integer變量 */ public class Test { public static void main(String[] args) { Integer i= new Integer(200); Integer j = 200; System.out.print(i == j); //輸出:false } } 

因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內存中的地址不同。所以 輸出為false。

5、兩個非new生成的Integer對象進行比較,如果兩個變量的值在區間[-128,127]之間,比較結果為true;否則,結果為false。

/** * 比較兩個非new生成的Integer變量 */ public class Test { public static void main(String[] args) { Integer i1 = 127; Integer j1 = 127; System.out.println(i1 == j1);//輸出:true Integer i2 = 128; Integer j2 = 128; System.out.println(i2 == j2);//輸出:false } } 

java在編譯Integer i1 = 127時,會翻譯成Integer i1 = Integer.valueOf(127)。

 

6、 Integer變量(無論是否是new生成的)與int變量比較,只要兩個變量的值是相等的,結果都為true。

/** * 比較Integer變量與int變量 */ public class Test { public static void main(String[] args) { Integer i1 = 200; Integer i2 = new Integer(200); int j = 200; System.out.println(i1 == j);//輸出:true System.out.println(i2 == j);//輸出:true } } 

包裝類Integer變量在與基本數據類型int變量比較時,Integer會自動拆包裝為int,然后進行比較,實際上就是兩個int變量進行比較,值相等,所以為true。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM