Java 1.5中引入了自動裝拆箱。自動裝箱和拆箱是將原始資料型別自動轉換為相應的java包裝類的便捷方式,反之亦然。
將原始資料型別轉換為相應包裝類的物件稱為自動裝箱。例如,將int
轉換為Integer
或將long
轉換為Long
物件。
當原始值為下面情況時,Java編譯器自動裝箱:
Integer
引數的方法可以通過傳遞int
來呼叫,java編譯器會將int
轉換為Integer
物件。Long
物件分配給long
變數。將包裝型別的物件轉換為對應的基本資料型別稱為拆箱。當包裝類的物件是以下情況時,Java編譯器應用拆箱:
下面是一個java程式範例,演示了java中如何自動裝箱和拆箱的例子。
import java.util.ArrayList;
import java.util.List;
public class AutoboxingUnboxing {
public static void main(String[] args) {
int i = 5;
long j = 105L;
// 傳遞int型別值,將在執行時使用java中的自動裝箱轉換為Integer物件
doSomething(i);
List<Long> list = new ArrayList<>();
// java自動裝箱在集合類中新增原始型別
list.add(j);
}
private static void doSomething(Integer in) {
// 在java中拆箱,在執行時隱式呼叫Integer.intValue()以返回int型別值
int j = in;
// java 拆箱,將 int 轉為 Integer
doPrimitive(in);
}
private static void doPrimitive(int i) {
System.out.println("doPrimitive i = "+i);
}
}
注意:始終依賴自動裝箱並不是一個好程式設計方式,有時它會導致編譯器錯誤,即方法過載時方法不明確。如下面範例是有問題的 -
關於java中的自動裝箱和拆箱知識點就講解到這裡。此功能在減少程式碼大小方面非常有用,因為不必顯式地將原始型別轉換為物件。