Ответ 1
Он скомпилирован в это:
Integer sum = Integer.valueOf(new Integer(2).intValue()+new Integer(4).intValue());
Вы можете проверить это, посмотрев на дизассемблер байтового кода, полученный с помощью 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
Вот часть, которая соответствует новому 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
И здесь сумма 2 + 4 вычисляется с помощью iadd
, сумма помещается в Integer по вызову Integer.valueOf
, а результат сохраняется в первой локальной переменной (astore_1
):
22: iadd
23: invokestatic #5; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
26: astore_1