这是一个例子
public Integer add(Integer a) {
a++;
return a;
}
该方法对应的字节码指令如下
0 aload_1
1 astore_2
2 aload_1
3 invokevirtual #62 <java/lang/Integer.intValue : ()I>
6 iconst_1
7 iadd
8 invokestatic #52 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
11 astore_1
12 aload_2
13 pop
14 aload_1
15 areturn
在第 12-13 行中,您可以观察到它执行了入栈操作,然后立即执行出栈操作。
我想知道为什么要这样设计以及为什么需要将“a”的另一个副本放入 LocalVariableTable
因为
a++
是 a = a + 1
的简写符号,并且您在返回变量之前重新分配变量。看一下字节码中的以下代码:
public Integer add2(Integer a) {
return a+1;
}