int和Integer的區別
int和Integer的基本區別
- int是基本數據類型,Integer是int包裝類。
- Integer變量必須實例化后才能使用,int可以直接使用
- Integer的默認值是null,int默認值是0
- Integer變量實際上是對象的引用,指向new的Integer對象,int是直接存儲數據
Integer的自動裝箱
一般我們生成對象都是Object o = new Objectz()
,但是對於Integer
,我們可以Integer a = 10
;
因為Integer的自動裝箱功能。
通過反編譯工具我們可以看到class文件下是
Integer a = Integer.valueOf(10);
這就是基本數據類型的裝箱。
Integer的自動拆箱
int b = a;
反編譯生成的class文件是int b = a.intVlaue();
深入對比
Integer a = new Integer(10);
Integer b = new Integer(10);
System.out.println(a == b);
System.out.println(a.equals(b));
結果前false,后true。
因為Integer變量是對Integer對象的引用,new了兩個對象,顯然內存地址不一樣,引用不一樣。
而Integer重寫了equals方法,數值一樣就返回true。
public static void main(String[] args) {
Integer a = 10;
Integer b = 10;
System.out.println(a == b);
Integer c = 128;
Integer d = 128;
System.out.println(c == d);
}
結果前true,后false
因為Integer自動裝箱時對數值在-128到127的對象放入緩存中,第二次就直接取緩存中的數據而不會new。
public static void main(String[] args) {
Integer a = new Integer(10);
int b = 10;
System.out.println(a == b);
}
結果為true
因為Integer類型和int比較時,會自動拆箱,化為基本類型數據比較。
觸發自動拆箱
算術運算會觸發自動拆箱