什么是裝箱拆箱?
Java有8種基本數據類型,并且為這8種類型提供了包裝器類型。比如說int類型的包裝器類型是Integer。
裝箱是指將基本數據類型轉換成對應的包裝器類型。拆箱是指將包裝器類型轉換基本數據類型。
Integer i = 10; //自動裝箱
int n = i; //自動拆箱
裝箱拆箱是如何實現的
在裝箱的時候自動調用的是Integer的valueOf(int)方法。而在拆箱的時候自動調用的是Integer的intValue方法。
也就是說Integer i = 10實際上是Integer.valueOf(10),int n = i實際上是i.intValue()
面試中的相關問題
Integer integer = 1;Integer integer1 = new Integer(1);//包裝器類型的構造方法必然會創建一個新的對象Integer integer3 = 1;int i = 1;System.out.println(integer==integer3);//Integer.valueOf會對-128-127的數做緩存,所以integer和integer3指向同一個對象System.out.println(integer==integer1);//兩個操作是引用類型時,這種情況不會觸發拆箱,==是比較兩個對象的內存地址,結果是falseSystem.out.println(integer==i);//,integer會拆箱成int類型,結果是trueSystem.out.println(integer<integer1);//integer和integer1都會拆箱成int類型,結果是false
注意:除了==或者!=操作兩個包裝器實例的情況是比較對象內存地址外,其他的操作符操作包裝器類型的話都會觸發自動拆箱。
?