参考 https://blog.csdn.net/lovepluto/article/details/81062176
int a = 1;
a = a++;
System.out.println(a);
这段代码输出结果 a = 1
执行过程如下:
iconst_1:将常量 1 压入操作数栈。
istore_1:弹出操作数栈顶的数(此时为 1)并赋值给局部变量第一个元素即索引为 1 的 a。
iload_1:把局部变量索引为 1 的变量(这里是 a)压入操作数栈,此时栈顶元素为 1 。(这里将 1 压入栈顶是因为下面将要执行 incc 1,1)
incc 1,1(关键):把局部变量索引为 1 的数加 1 ,此时 a 的值为 2。注意:这个结果没有压入操作数栈。
istore_1:弹出栈顶的元素(此时为 1)赋值给 a ,覆盖 a 为 2 的结果。