i、j、k分别是多少
public static void main(String[] args) {
int i = 1;
i = i++;
int j = i++;
int k = i + ++i + i++;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
分析过程
i = i++;
- 将i=1压入操作数栈
- 将局部变量i自增成2
- 将操作数栈内的1赋值给变量i
int j = i++;
- 将i=1压入操作数栈
- 将局部变量i自增为2
- 将操作数栈中的1赋值给j
int k = i + ++i + i++;
- 将i=2压入操作数栈
- 将局部变量i自增成3
- 将3压入操作数栈
- 将3再次压栈
- 将局部变量i自增成4
- 进行3*3运算,将结果压栈
- 计算9+3压栈
- 将11赋值给k
总结
- 赋值最后计算
- =右边从左到右加载依此压入操作数栈
- 实际运算看运算符优先级
- 自增、自减直接修改局部变量到值,不经过操作数栈
- 最后赋值之前,临时结果也是存储在操作数栈中