java中i=i++和j=i++的區別小結

i=i++;j=i++的區別

i=i++———–在java中 這個語句的前後順序應該是這樣的(tmp=i;i++;tmp==i)

java的編譯器在遇到i++和i- -的時候會重新為變量運算分配一塊內存空間,以存放原始的值,而在完成瞭賦值運算之後,將這塊內存釋放掉,下面首先看一下如果是j=i++的情況:

 

i的原始值存放在後開辟的內存中,最後這個值將賦值給j,這樣j=i++後,j就會得到i的值,而i又將自加,所以,在釋放內存之後,原來存放j和i的地方將得到值將是:j(此時的值等於初始i值)和i(i自加後的值)。

看看i=i++的情況:

 

i的原始值存放在後開辟的內存中,給剛開始的i進行自加,最後再將後面內存中的i賦給剛開始的i.

我們來看看這兩個程序反編譯的結果

這個是i=i++; 

 

1:   iconst_0   整型常量值0進棧

2:   istore_1   將棧頂整型數值存入第二個局部變量

3:   iload_1  第二個整型局部變量進棧

4:   iinc    1, 1 指定整型變量增加指定值

5:   istore_1  將棧頂整型數值存入第二個局部變量

 j = i++;

 

反編譯後是這樣的

7:   iconst_0  整型常量值0進棧

8:   istore_1  將棧頂整型數值存入第二個局部變量

9:   iconst_0  整型常量值0進棧

10:  istore_2 將棧頂整型數值存入第三個局部變量

11:  iload_2  第三個整型局部變量進棧

12:  iinc    2, 1 指定整型變量增加指定值

15:  istore_1  將棧頂整型數值存入第二個局部變量

總結

到此這篇關於java中i=i++和j=i++區別的文章就介紹到這瞭,更多相關java i=i++和j=i++區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀:

    None Found