当我们添加两个Integer对象时在里面操作?

Esh*_*aka 12 java

有人可以解释一下我们在java中添加两个Integer对象时的内部行为吗?(就像它是unbox Object into primitives然后添加两个整数然后将它装入Integer对象)

Integer sum = new Integer(2) + new Integer(4); 
Run Code Online (Sandbox Code Playgroud)

Jon*_*oni 18

它被编译成:

Integer sum = Integer.valueOf(new Integer(2).intValue()+new Integer(4).intValue());
Run Code Online (Sandbox Code Playgroud)

您可以通过查看使用的字节代码反汇编来验证这一点javap -c.

这是与新的Integer(2).intValue()对应的部分,在堆栈上保留int 2:

0:  new #2; //class java/lang/Integer
3:  dup
4:  iconst_2
5:  invokespecial   #3; //Method java/lang/Integer."<init>":(I)V
8:  invokevirtual   #4; //Method java/lang/Integer.intValue:()I
Run Code Online (Sandbox Code Playgroud)

这是与新的Integer(4).intValue()对应的部分,在堆栈上保留int 4:

11: new #2; //class java/lang/Integer
14: dup
15: iconst_4
16: invokespecial   #3; //Method java/lang/Integer."<init>":(I)V
19: invokevirtual   #4; //Method java/lang/Integer.intValue:()I
Run Code Online (Sandbox Code Playgroud)

在这里计算和2 + 4 iadd,通过调用将总和装入一个整数Integer.valueOf,结果存储在第一个局部变量(astore_1)中:

22: iadd
23: invokestatic    #5; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
26: astore_1
Run Code Online (Sandbox Code Playgroud)