先看代码
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);
}
}
我们根据代码逐行分析:
- i=i++; i++需要先把i值压入操作数栈,然后值自增,把i值压入操作数栈后为1,局部变量自增1则为2。然后再把操作栈的数赋值给i,则的值为1
- int j = i++; 把值压入操作数栈,则为1,然后自增1,则i的局部变量为2,再把操作数栈中的值付给j则j值为1
- int k = i + ++i * i++;对于操作数栈还应从左往右开始,则i的局部变量为2,int k = 2+ ++i * i++,接下来++i为自增不需要压入操作数栈所以int k = 2 +3i++,这时i的局部变量为3,i++ 先把 i 的值压入操作数栈然后再付给i,则int k = 2+33,则k的值为11
输出结果为
i= 4
j=1
k=11
网友评论