以下代码执行后的输出:

    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);
    }

1)i=1

2)将i的值1压入到操作数栈;i++之后,变量i=2;最后将操作数栈的值1赋值给i。结果i=1。

3)将i的值1压入到操作数栈;i++之后,变量i=2;最后将操作数栈的值1赋值给j。结果i=2,j=1。

4)将i的值2压入到操作数栈;++i之后,变量i=3,然后将3压入到操作数栈;i++,现将i=3压入到操作数栈,计算2+3*3=11,然后i++,i=4;最后将11赋值给k。结果i=4,j=1,k=11。

小结:

  • 赋值=是最后计算的
  • =右边的从左到右加载值依次压入到操作数栈
  • 实际先算哪个,看运算符优先级
  • 自增、自减操作都是直接修改变量的值,不经过操作数栈
  • 最后的赋值之前,临时结果也是存储在操作数栈中

 

 posted on 2020-12-04 09:04  会飞的金鱼  阅读(108)  评论(0)    收藏  举报