自增變量操作:
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。
小結
指派 = ,最初計算
= 左邊的從左到右加載值順次壓入操作數棧
理論先算哪個,看運算符優先級
自增、自減都是間接批改變量的值,不通過操作數棧
最初的指派之前,長期後果也是存儲在操作數棧中