Bạn có thể sử dụng công cụ javap
để tự mình xem. Biên dịch đoạn mã sau:
public class AutoboxingTest
{
public static void main(String []args)
{
Integer a = 3;
int b = a;
}
}
Để biên dịch và tháo rời:
javac AutoboxingTest.java
javap -c AutoboxingTest
Đầu ra là:
Compiled from "AutoboxingTest.java"
public class AutoboxingTest extends java.lang.Object{
public AutoboxingTest();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_3
1: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
4: astore_1
5: aload_1
6: invokevirtual #3; //Method java/lang/Integer.intValue:()I
9: istore_2
10: return
}
Vì vậy, như bạn có thể thấy, autoboxing gọi phương thức tĩnh Integer.valueOf()
, và autounboxing gọi intValue()
trên đối tượng Integer
đã cho. Không có gì khác, thực sự - đó chỉ là cú pháp cú pháp.
Nguồn
2009-01-03 05:40:09
Thật thú vị khi lưu ý rằng nó gọi valueOf (int) thay vì Integer mới (int) để chuyển đổi int thành Integer. valueOf thực hiện bộ nhớ đệm đối tượng cho 1000 số nguyên đầu tiên. –
-128 đến 127 được lưu trong bộ nhớ cache –
@Craig: phải chính xác, -128 đến 127 ** phải được lưu trong bộ nhớ cache, các giá trị khác có thể được lưu trong bộ nhớ cache bằng cách triển khai. –