Java字节码分析i=i++的结果

示例代码

1
2
3
4
5
public static void main(String[] args) {
int i =3;
i=i++;
System.out.println(i);
}

运行结果是3,不是4,接下来就探索一下原因

分析

分析

关键还是对i++ IINC 1 1的理解。i++是直接在局部变量表上做自加操作。而i=i+1是先从局部变量表拷贝i的值到操作栈,在操作栈执行i+1操作,最后将操作栈的运算结果写入局部变量表,从这个角度也体现了i++的运算效率更高。