链接:https://www.zhihu.com/question/22448065/answer/31719259
环境JDK1.6编译结果:
public static void main(java.lang.String[] arg0);
0 iconst_1
//常量int类型1入栈
1 istore_1
//弹出栈顶元素(常量int 1)存入位置为1的局部变量(i)中,即i=1
2 iload_1
//从位置为1的局部变量中取出元素压入栈,数值为1
3 iinc 1 1
//局部变量位置为1的元素自增1,i=2,未入栈,栈顶元素不变
6 istore_1
//弹出栈顶元素(常量int 1)存入位置为1的局部变量(i)中,即i=1
7 getstatic java.lang.System.out : java.io.PrintStream [2]
10 iload_1
//从位置为1的局部变量中取出元素压入栈,所以数值还是为1
11 invokevirtual java.io.PrintStream.println(int) : void [3]
14 return
Line numbers:
[pc: 0, line: 3]
[pc: 2, line: 4]
[pc: 7, line: 5]
[pc: 14, line: 6]
}
简单来说,就是iinc这个指令没有将值push,所以pop的时候还是原来的值。