以下代码执行后的输出:
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
浙公网安备 33010602011771号