当Java编译器将原语自动包装到包装类时,它在幕后生成什么代码?我想象它调用:
您可以使用该javap工具亲自查看。编译以下代码:
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 }
因此,如您所见,自动装箱将调用static方法Integer.valueOf(),而自动拆箱intValue()将在给定Integer对象上调用。没什么,真的- 只是语法糖。
Integer.valueOf()
intValue()
Integer