从字节码分析自增变量

Scroll Down

如下代码的运行结果:

public class IncrementVariableTest {
    public static void main(String[] args) {
        int i = 1;
        i = i++;
        int j = i++;
        int k = i + ++i * i++;
        System.out.println("i=" + i);
        System.out.println("j=" + j);
        System.out.println("k=" + k);

    }

}

结果

i=4
j=1
k=11

运行过程分析

  • image
  • image-1659313098618
  • image-1659313119246

小结

  • 赋值=,最后计算

  • =右边的从左到右加载值依次压入操作数栈

  • 实际先算哪个,看运算符优先级

  • 自增、自减操作都是直接修改变量的值,不经过操作数栈

  • 最后的赋值之前,临时结果也是存储在操作数栈中

  • 建议:《JVM虚拟机规范》关于指令的部分

代码示例

代码示例