i++,++i的底层
i++和++i的区别:先执行iload指令还是innc指令
假如i=4,s=i++时
- 先执行iload 1,(i在局部变量表索引22的位置),将局部变量表索引22位置的i的值4压入操作数栈
- 然后执行引擎对i执行自增运算(innc 22,1),innc指令是在局部变量slot(槽)上进行运算的,所以局部变量表上的i=5
- 最后执行执行istore 2(s在局部变量表索引2的位置),所以s=4.
假如i=4,s=++i时
- 首先执行引擎对i执行自增运算(innc 22,1),innc指令是在局部变量slot(槽)上进行运算的,所以局部变量表上的i=5
- 然后执行iload 1,将局部变量表索引22位置的i的值5压入操作数栈
- 最后执行istore 2,所以s=5
如若main线程,注意局部变量表第一个位置索引0是 args的,自减 innc x,-1(x为他在局部变量表的位置)