Java中,裝箱就是 自動將基本數據類型轉換爲包裝器類型;拆箱就是 自動將包裝器類型轉換爲基本數據類型。
自動裝箱與拆箱的特點有
(1)包裝器類型與基本數據類型之間可以進行比較,以及運算,在過程中,需要將包裝器類型拆箱,再進行比較及運算
(2)包裝器類型之間也可以進行比較及運算,也是需要先將其拆箱,再進行比較及運算。
(3)如果值不在-128~127之間,則在裝箱的時候,會創建一個新的對象,float類型及double類型則一定會創建新的對象。
(4)包裝器類型的equals方法經過覆蓋了object類的equals方法,查看源碼可知它先判斷兩個對象是否是同一類型,如果不是的話,就返回false,如果是的話,再比較對象中存的值。
int a = 1;
Integer b = 1;
Integer c = 1;
Integer d = 2;
Integer e = 3;
Integer f = 128;
Integer g = 128;
Long h = 3L;
Double m = 4.0;
Double n = 4.0;
Float p = 5f;
Float q = 5f;
System.out.println("a == b : " + (a == b)); //true
System.out.println("b ==c : " + (b == c)); //true
System.out.println("e == (c + d) : " + (e == (c + d))); //true
System.out.println("e.equals(c + d) : " + (e.equals(c + d))); //true
System.out.println("h == (c + d) : " + (h == (c + d))); //true
System.out.println("h.equals(c + d) : " + (h.equals(c + d))); //false
System.out.println("f == g : " + (f == g)); //false
System.out.println("m == n : " + (m == n)); //false
System.out.println("p == q : " + (p == q)); //false
System.out.println("m == d * 2 : " + (m == d * 2)); //true
System.out.println("p == (d + e) : " + (p == (d + e))); //true