自動裝箱是 Java 編譯器在基本型別與其對應的包裝類別物件之間的自動轉換,即從 int 到 Integer、double 到 Double 等的轉換。拆箱是從包裝類別物件到其等效基本類型的自動轉換,即:整數轉int。該功能在 Java 1.5 版本中引入。
編譯器在內部使用valueOf() 方法將基元轉換為對應的包裝物件(即自動裝箱),反之亦然,它使用intValue()、doubleValue() 等,就像拆箱的範例一樣。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
java中的原始類型和包裝類別映射如下:
Primitive type | Wrapper class |
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
int | Integer |
long | Long |
short | Short |
double | Double |
讓我們採用一個整數陣列並利用拆箱概念。
import java.util.ArrayList; public class MyClass { public static void main(String args[]) <em>{</em> ArrayList<Integer> intlist = new ArrayList<Integer>(); //wrapper Integer objects being added here intlist.add(1); interest.add(2); //auto-unboxing is happening here int x = intlist.get(0); System.out.println(x); } }
因此,在上面的例子中,當給 x 添加值時,我們看到 x 看起來是原始的。因此,當分配完成時,拆箱會自動發生。
public class MyClass { public static void main(String args[]) { Integer sum =0; for(int i=0;i<10;i++) { sum = sum + i; } System.out.println(sum); } }
考慮下面的程式碼片段;這會輸出什麼?
public class Main { public static void main(String[] args) { Integer m = 34123; Integer x = 34123; System.out.println(x==m); } }
public class Main { public static void main(String[] args) { Integer m = 100; Integer x = 100; System.out.println(x==m); } }
這將計算為「true」值,因為文字池中存在 100。
public class Main { public static void main(String[] args) { Overload obj = new Overload(); int i =5; obj.printval(5); Integer m = i; obj.printval(m); } } class Overload { public void printval(int i) { System.out.println("printing the unboxed value "+ i); } public void printval(Integer i) { System.out.println("printing the autoboxed value "+ i); } }
輸出:
注意: 您可以在任何 IDE 中執行上述程序以獲得上述輸出。我們了解了自動裝箱和拆箱的用例,以及這個概念的隱含性及其優缺點。編碼時必須謹慎使用;否則,它會增加不必要的計算轉換開銷。因此,轉換必須在原語中完成,以避免過多的垃圾收集開銷和臨時物件建立。我們也看到了 Java 中帶有重載概念的自動裝箱的用例。您可以同時檢查更多限制。
以上是Java 中的自動裝箱與拆箱的詳細內容。更多資訊請關注PHP中文網其他相關文章!