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中文網其他相關文章!