java自動拆箱、裝箱

自動拆箱和裝箱僅適用於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類詳解

發佈了19 篇原創文章 · 獲贊 2 · 訪問量 6492
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章