引题:
观察以下代码以及运行结果:
int i = 1;
i = i ++;
System.out.println(i);
//输出为
1
这个过程中运算的执行顺序是怎样的?i 经过了几个状态的变化?分别是什么?我们借助 Java bytecode 来观察代码执行过程中底层的运算过程.
辅助工具:
Java bytecode(Java字节码_维基百科)(Java_bytecode_instruction_listings)
观察Java bytecode:
![红框部分为代码对应的Java bytecode](https://img-blog.csdnimg.cn/20200727200253314.png)
Java bytecode代码解释(类似汇编语言):
ILOAD : load an int value from a local variable #index
IINC : increment local variable #index by signed byte const
ISTORE : store int value into variable #index
由此可见,第六行代码执行过程中做了三步操作:
- - 加载变量 i 的值到栈顶 //此时栈顶数据为1, i=1;
- - 变量 i 自增 1 //此时栈顶数据为1, i=2;
- - 保存栈顶数据到变量 i //此时栈空, i=1;
结论:
因此,i = 1,中间有个短暂的 i = 2 的状态,但为何会按如此顺序操作,应该涉及到JVM的运行机制了,暂时还没接触到。