关于 i++ 与 ++i 的区别
关于JVM的运行时数据区图
汇编指令
这里的栈指的是操作数栈
public void test1();
Code:
0: iconst_0 // 将常数0压栈
1: istore_1 // 将0弹出赋值给局部变量表下标值为1的数[i](i = 0)
2: iload_1 // 将局部变量表下标值为1的数[i]里的值拿出来压栈,也就是将0压栈
3: iinc 1, 1 // 将局部变量表下标值为1的数[i]里的值 + 1
6: istore_2 // 将0弹出赋值给局部变量表下标值为2的数[j](j = 0)
7: return // 返回(此时:i = 1,j = 0)
public void test2();
Code:
0: iconst_0 // 将常数0压栈
1: istore_1 // 将0弹出赋值给局部变量表下标值为1的数[i](i = 0)
2: iinc 1, 1 // 将局部变量表下标值为1的数[i]里的值 + 1
5: iload_1 // 将局部变量表下标值为1的数[i]里的值拿出来压栈,也就是将1压栈
6: istore_2 // 将1弹出赋值给局部变量表下标值为2的数[j](j = 1)
7: return // 返回(此时:i = 1,j = 1)