天天看點

java自增變量,關于java:自增變量問題i

自增變量操作:

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。

小結

指派 = ,最初計算

= 左邊的從左到右加載值順次壓入操作數棧

理論先算哪個,看運算符優先級

自增、自減都是間接批改變量的值,不通過操作數棧

最初的指派之前,長期後果也是存儲在操作數棧中