天天看點

java自增變量_弄懂Java的自增變量

首先我們來看一段代碼:

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 = a + b * c,我們設i = 0 , a為1,b為2,c為3。

在進行運作時,左邊的i是儲存在局部變量中,也就是儲存在棧中;而右邊的計算是在操作數棧中進行計算的。

java自增變量_弄懂Java的自增變量

在進行右邊操作數棧計算完畢後,會将結果指派給左邊對應的局部變量。

java自增變量_弄懂Java的自增變量

第一步

在進行i = i ++進行計算時,會将左邊的放進局部變量,右邊的i++放進操作數棧,然後進行計算。

java自增變量_弄懂Java的自增變量

此時計算i++,i++ 操作等于 i = i + 1,是以加1後指派給局部變量,而操作數棧仍未1。

java自增變量_弄懂Java的自增變量

将操作數棧的1指派給局部變量,是以這一步計算完之後結果仍未1。

java自增變量_弄懂Java的自增變量

第二步

?此時局部變量中i的值為1 ,現将i放進操作數棧,然後計算i++。

java自增變量_弄懂Java的自增變量

計算完i++之後,局部變量中的i為2,操作數棧的結果為1。

java自增變量_弄懂Java的自增變量

然後将操作數棧中的值指派給j。

java自增變量_弄懂Java的自增變量

第三步

在進行計算之前,i的值為2,j的值為1。

右邊的三個數字分别要壓入操作數棧,分别是i ,++i,i++。

i直接放入是2;++i要進行計算,計算後局部變量中的i是3,因為是++i,是以放入的也是3;i++先放入3,然後計算i++,此時局部變量表中i的值為4。

java自增變量_弄懂Java的自增變量

将前一步操作數棧的值計算完之後放入k中即可。

java自增變量_弄懂Java的自增變量

總結

指派=,最後計算

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

實際先算哪個,看運算符優先級

自增、自減操作都是直接修改變量的值,不經過操作數棧

最後的指派之前,臨時結果也是存儲在操作數棧中