Java自動裝拆箱

2019-10-16 22:23:30

Java 1.5中引入了自動裝拆箱。自動裝箱和拆箱是將原始資料型別自動轉換為相應的java包裝類的便捷方式,反之亦然。

1. Java自動裝箱

將原始資料型別轉換為相應包裝類的物件稱為自動裝箱。例如,將int轉換為Integer或將long轉換為Long物件。

當原始值為下面情況時,Java編譯器自動裝箱:

  • 作為引數傳遞給期望相應包裝類的物件的方法。例如,一個帶有Integer引數的方法可以通過傳遞int來呼叫,java編譯器會將int轉換為Integer物件。
  • 分配給相應包裝類的變數。例如,將Long物件分配給long變數。

2. Java拆箱

將包裝型別的物件轉換為對應的基本資料型別稱為拆箱。當包裝類的物件是以下情況時,Java編譯器應用拆箱:

  • 作為引數傳遞給期望相應基元型別的值的方法。
  • 分配給相應基元型別的變數。

3. 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中的自動裝箱和拆箱知識點就講解到這裡。此功能在減少程式碼大小方面非常有用,因為不必顯式地將原始型別轉換為物件。