Вы можете использовать инструмент javap
, чтобы убедиться в этом. Скомпилируйте следующий код:
public class AutoboxingTest
{
public static void main(String []args)
{
Integer a = 3;
int b = a;
}
}
Чтобы скомпилировать и разобрать:
javac AutoboxingTest.java
javap -c AutoboxingTest
Вывод:
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
}
Таким образом, как вы можете видеть, автоматическая блокировка вызывает статический метод Integer.valueOf()
, а автоматическая блокировка вызывает intValue()
для данного Integer
объекта. На самом деле больше ничего нет - это просто синтаксический сахар.