从字节码角度分析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 = 10
int j = 20;
int b = ++j; //通过下图可以看出先局部变量表索引3的位置加1,然后将局部变量表中索引3的值push到操作数栈,b = 11
}
@Test
public void method9() {
int i = 10;
i = i++; //先将局部变量表1的位置的值10,push到操作数栈,然后局部变量表1的值加1,然后istore_1又将操作数栈10的值写回局部变量表1的位置
System.out.println(i); //最终i的值为10
}