1、面试题
结果:
涉及到局部变量表和操作数栈的相互复制
1)int i= 1 局部变量表 i = 1
- i = i ++ ;
a.将局部变量压入操作数栈
b. i自增(局部变量)
c. (赋值运算)将操作数栈的内容赋给i
3)j = i++
a. i=1压入操作数栈
b. i 自增变成 2
c.(赋值运算)将操作数栈中的内容弹出 j =1
4)k = i + i + i
a.局部变量 i = 2
b.从左到右依次把值压入栈中
(栈顶)3-->3->2(栈底)
但是这是局部变量 i =4
c.操作数栈中的内容按照运算规则运算 3*3 =9重新压入栈中
(栈顶)9-->2(栈底)
d. 9+2 =11 压入操作数栈
e. (赋值运算) 11 弹栈 -->k
i++ 先将值压入操作数栈,再将局部变量加一
++i 先将i做自增,再将结果压入操作数栈
2.结论
中间的运算结果重新压入操作数栈中以备运算
3.代码
public class Test {
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);
}
}