题目
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);
}
解析
public static void main(String[] args) {
int i = 1;
// (i++)=1 ,i=1
i = i++;
// i=1 , (i++)=1 , j=1, i=2
int j = i++;
//i=2, (++i)=3, i=3, (i++)=3 , i=4 ,k=11
int k = i + ++i * i++;
// 4
System.out.println("i=" + i);
// 1
System.out.println("j=" + j);
// 11
System.out.println("k=" + k);
}
.class 文件
public static void main(String[] args) {
int i = 1;
int i = i++;
i = i + 1;
int k = i++ + i * i++;
System.out.println("i=" + i);
System.out.println("j=" + i);
System.out.println("k=" + k);
}
小结
- 赋值 = ,最后计算
- = 右边的从左边加载值一次压入操作数栈
- 实际先算哪个,看运算符优先级
- 自增、自减 操作都是直接修改变量的值, 不经过操作数栈
- 最后的赋值之前,临时结果也是存储在操作数栈中