自動拆箱和裝箱僅適用於JDK1.5(包括1.5)以後的版本。它只是編譯階段的概念而與程序的運行無關,主要目的是方便程序員編碼,提高效率。
public class AutoBox {
public static void main(String[] args) {
//JDK1.4以前的裝箱和拆箱
//裝箱-基本類型裝換成封裝類型
Integer it = new Integer(10);
//拆箱-封裝類型裝換成基本類型
int i = it.intValue();
//JDK1.5以後
Integer i1=5;//自動裝箱
System.out.println(i1);
int i2=it;//自動拆箱
System.out.println(i2);
}
}
注意:比較兩個Integer類型的數據不能使用“==”,要使用方法equals()。
public class AutoBoxCompare {
public static void main(String[] args) {
Integer i1=128;
Integer i2=128;
System.out.println(i1==i2);//false
System.out.println(i1.equals(i2));//true
//上述兩式相當於
Integer i3=new Integer(128);
Integer i4=new Integer(128);
System.out.println(i3==i4);//false
//需要注意的是
Integer i5=127;
Integer i6=127;
System.out.println(i5==i6);//true
Integer i7=-128;
Integer i8=-128;
System.out.println(i7==i8);//true
Integer i9=-129;
Integer i10=-129;
System.out.println(i9==i10);//false
}
}
通過上面代碼注意到Integer類的比較“==”比較的是對象,也可以說是地址,equals()比較的就是內容了。還有就是比較奇怪的地方是當Integer在-128-127取值時比較兩個對象返回的是true,原因與String類類似,但又有所不同,對於Integer類來說,當數據位於-128-127時,java會引入一個“整形常量池”,該整形常量池只存儲-127~128的數據,當超過這個數據時,會在堆中建立一個對象,所以直接比較對象的話由於地址不同會報錯。
String類可以參考 String類詳解