Java 中的自動裝箱與拆箱:全面講解
原始資料型別與其對應的包裝類別之間的自動轉換,稱為自動裝箱和拆箱,是在Java 5.0 中引入的。儘管很簡單,但理解機制的內部工作原理可能會令人困惑。
自動裝箱:基於建構子的機制
與最初的假設相反,自動裝箱不是完全依賴建構子。相反,呼叫包裝類別的 valueOf() 方法。此方法允許快取並避免不必要的物件創建。
例如,語句:
Integer n = 42;
編譯為:
invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
拆箱:擷取原始值
拆箱:擷取原始值
箱從以下位置檢索原始值包裝物件。與自動裝箱類似,使用包裝類別的 intValue() 方法。int n = Integer.valueOf(42);
例如,語句:
invokevirtual #22 // Method java/lang/Integer.intValue:()I
編譯為:
規則的例外
intObject = byteValue; // ==> Error規則的例外
通常自動裝箱和拆箱無縫發生,但也有例外。例如,當將位元組值裝箱到 Integer 物件中時,編譯器會拋出錯誤:
出現此限制是因為 Integer 包裝類別缺少帶有位元組參數的建構子。 進一步的考慮因素Java 語言規範(JLS) 詳細介紹了自動裝箱和分別在§5.1.7 和§5.1.8 中取消裝箱轉換。它提供了對底層機制和邊緣情況的全面理解。以上是Java如何處理自動裝箱和拆箱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!