標題:如何理解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中的裝箱和拆箱指的是基本數據類型和包裝類型的自動相互轉換,它爲開發者提供了方便。開發人員也可以不使用它,而手動的進行類型轉換。並且,這個自動轉換的過程是在編譯階段。