Java裝箱和拆箱

標題:如何理解Java中的裝箱和拆箱

基本數據類型的自動裝箱(autoboxing)和拆箱(unboxing)是Java5.0提供的新功能。雖然 爲打包基本數據類型提供了方便, 但是在提供方便的同時卻隱藏了一些細節,建議在能夠區分基本數據類型與對象的差別時再使用。

一、Java的基礎數據類型與包裝類型的關係
在Java中,所有要處理的東西幾乎都是對象。操作對象比操作基本數據類型更方便一些,而基本數據類型的效率更高。因此,在開發過程中,兩者的轉換是經常需要的。

二、Java裝箱和拆箱的原理

(1)自動裝箱
對於提供的自動裝箱的功能,開發者可以直接使用以下語句來打包基本數據類型: Integer integer = 10;
在進行編譯時,編譯器再自動根據你寫下的語句,判斷是否進行自動裝箱動作。
在上例中,integer變量是Integer類的實例,同樣動作可以適用於boolean、byte、short、char、long、float、double等基本數據類型,分別會使用對應的包裝類型Boolean、Byte、Short、Long、Float或Double。以下是直接使用
自動裝箱功能的示例:

public class AutoBoxDemo {
    public static void main(String[] args) {
        Integer data1=10;   //自動裝箱
        Integer data2=20;   //自動裝箱
        //轉爲double值再除以3
        System.out.println(data1.doubleValue()/3);  //3.3333333333333335
        //進行兩個值的比較
        System.out.println(data1.compareTo(data2)); //-1
    }
}

//程序看起來簡潔了很多,data1與data2在運行時就是Integer的實例,
//可以直接進行對象操作。

(2)自動拆箱
Java5.0以上的版本可以自動裝箱,也可以自動拆箱,也就是將對象中的基本數據形態信息從對象中自動取出,例如下面這樣寫是可以的:

Integer fooInteger = 10;
 int fooPrimitive = fooInteger;
 
 //fooInteger變量在自動裝箱爲Integer的實例後,
 //如果被指定給一個int類型的變量   fooPrimitive ,
 //則會自動變爲int類型再指定給fooPrimitive。另外,在運算時,
 //  也可以進行自動裝箱與拆箱,代碼如下:
 Integer i = 10;
 System.out.println(i+10);  //20
 System.out.println(i++);   //10
 //上例中會顯示20和10,編譯器會自動進行裝箱與拆箱,也就是10會先被裝箱,然後在 i+10時會先拆箱,再進行加法運算,i++時也是先拆箱再進行遞增運算

綜上,Java中的裝箱和拆箱指的是基本數據類型和包裝類型的自動相互轉換,它爲開發者提供了方便。開發人員也可以不使用它,而手動的進行類型轉換。並且,這個自動轉換的過程是在編譯階段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章