从字节码角度分析i++和++i的区别
public void method6() {int i =10;i++; //在局部变量表上直接加1}
public void method7() {int i =10;++i; //字节码同i++}
public void method8() {int i = 10;int a = i++; //通过下图可以看出先将局部变量表中的值push到操作数栈,然后局部变量表索引1的位置加1,a = 10int j = 20;int b = ++j; //通过下图可以看出先局部变量表索引3的位置加1,然后将局部变量表中索引3的值push到操作数栈,b = 11}
@Testpublic void method9() {int i = 10;i = i++; //先将局部变量表1的位置的值10,push到操作数栈,然后局部变量表1的值加1,然后istore_1又将操作数栈10的值写回局部变量表1的位置System.out.println(i); //最终i的值为10}