一、 int是基本數據類型,int變量存儲的是數值。Integer是引用類型,實際是一個對象,Integer存儲的是引用對象的地址。java
二、ui
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
由於new生成的是兩個對象,其內存地址不一樣spa
三、int和Integer所佔內存比較:翻譯
Integer對象會佔用更多的內存。Integer是一個對象,須要存儲對象的元數據。可是int是一個原始類型的數據,因此佔用的空間更少。code
/** * 比較非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。對象
/** * 比較兩個非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)。內存
/** * 比較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。it