自增变量操作:
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=4,j=1,k=11
解析:
1、int i=1,局部变量表中有一个 i=1 的变量
2、i = i++,i++中 i 要运算,先把i的值压入操作数栈
3、i变量自增 1,不通过操作数栈,在局部变量表中i的值变为 2
3、最初进行赋值,把操作数中的值赋给 i,i的值又变为了 i。
所以说,i 的值如同只是很短暂的自增了一下。
4、int j = i++中,和下面的套路一样,i 的值自增变为了2。赋值操作使 j 变为1
5、int k = i + ++i * i++中,从左到右加载值顺次压入操作数栈。先把 i 压入操作数栈,i的值为2。
6、而后计算++i,i变量自增1变为3,再把i的值压入操作数栈。此时操作数栈有3和2
7、再计算i++,先把 i 的值压入操作数栈,再把i变量自增1变为4。此时操作数栈有3、3和2。
8、看运算符优先级。先把操作数栈中前两个弹出求乘积,3*3=9,将后果再压入栈。此时栈有9和2。
9、把操作数栈中的值弹出求和再赋值给 k,k值为11。
小结
赋值 = ,最初计算
= 左边的从左到右加载值顺次压入操作数栈
理论先算哪个,看运算符优先级
自增、自减都是间接批改变量的值,不通过操作数栈
最初的赋值之前,长期后果也是存储在操作数栈中