首頁 >Java >java教程 >自動裝箱和拆箱在 Java 中是如何運作的?

自動裝箱和拆箱在 Java 中是如何運作的?

Linda Hamilton
Linda Hamilton原創
2024-11-19 19:11:03736瀏覽

How Do Auto Boxing and Unboxing Really Work in Java?

Java 中的自動裝箱與拆箱:揭開隱藏機制

Java JDK 5.0 中引入的自動裝箱和拆箱,簡化了之間的轉換原始類型及其相應的包裝類別。然而,這些概念的確切工作原理可能令人困惑。

自動裝箱:多包裝器

最初,自動裝箱似乎只依賴實現的構造函數在包裝類別中。然而,深入研究 Integer.class 的字節碼會發現不同的情況。

Integer n = 42;

編譯為:

0: bipush        42
2: invokestatic  #16                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1      

字節碼使用 valueOf() 方法而不是建構子。這種方法具有快取、避免創建冗餘物件等優點。

自動拆箱:檢索原始本質

同樣,自動拆箱涉及檢索包裝的原始值在物件內通過整數的intValue() 方法或其他包裝器的類似方法

int n = Integer.valueOf(42);

編譯為:

0: bipush        42
2: invokestatic  #16                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: invokevirtual #22                 // Method java/lang/Integer.intValue:()I
8: istore_1      

結論

本質上,自動裝箱和拆箱是透過適當調用的靜態valueOf 來操作的() 或包裝類別上的實例intValue() 方法。這種機制提供了原始表示和基於物件的表示之間的無縫轉換,增強了程式碼的可讀性和效率。

以上是自動裝箱和拆箱在 Java 中是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn