所謂的拆箱裝箱,其實就是一個簡單的語法糖。我們以Integer為?。
(一)裝箱
Integer i = 1;
本質上就是:
Integer i = Integer.valueOf(1);
(二)拆箱
int m = i;
本質上就是:
int m = i.intValue();
(三)小練習
public static void main(String[] args) {Integer a = 1;Integer b = 2;Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;Long g = 3L;// 返回true:c和d都為-128~127期間的數值,// 處于這個期間的數值會被緩存起來,// 所以c和d指向的是同一個對象。System.out.println(c == d);// 返回false:e和f分別在堆中創建了不同的對象。System.out.println(e == f);// 返回true:在算數運算時包裝類型會自動拆箱,// 所以(a+b)相當于(a.intValue()+b.intValue()),// 同時()的存在并不會觸發裝箱,所以(a+b)的結果為基本類型,// 此時c也會被迫拆箱,所以3=3返回trueSystem.out.println(c == (a + b));// 返回true,這個不用解釋System.out.println(c.equals(a + b));// 返回true,這個和上面的道理基本一樣,// g也會被迫拆箱,而基本類型long和int可以直接比較數值,// 所以返回true。System.out.println(g == (a + b));// 返回false,這個主要是因為equals的內部邏輯,// 它會先判斷是不是Long類型,是的話才會拆箱比較,// 否者直接返回false。System.out.println(g.equals(a + b));}
?