首頁  >  文章  >  Java  >  Java 中自動裝箱/拆箱如何運作?

Java 中自動裝箱/拆箱如何運作?

Barbara Streisand
Barbara Streisand原創
2024-11-14 12:37:02394瀏覽

How Does Auto Boxing/Unboxing Work in Java?

Java 中的自動裝箱/拆箱

Java 中的自動裝箱和拆箱簡化了原始資料類型及其相應包裝類別之間的型別轉換。在 JDK 5.0 中引入,此功能提供了這兩種表示形式的無縫整合。

自動裝箱

將原值指派給包裝類別變數時,會發生自動裝箱。與使用包裝類別建構函數的假設相反,而是呼叫靜態方法 valueOf()。這在為以下程式碼產生的字節碼中很明顯:

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