注:本文還沒有改完。周末在改……望見諒……
i++和++i使用的不同點在于,前者是同一語句中的下一個表達式執行完后自增,后者是立即自增。

我們來看一下核心的字節碼:
0: iconst_0 //將int型0推送至棧頂 1: istore_1 //將棧頂int型數值存入第二個本地變量 2: iload_1 //將第二個int型本地變量推送至棧頂 3: iinc 1, 1 //將指定int型變量增加指定值(i++, i--, i+=2) 6: istore_1 //將棧頂int型數值存入第二個本地變量 7: return
再來看一個計算:

j++執行完在執行“=”
我們來看一下核心的字節碼:
0: iconst_0 //將int型0推送至棧頂1: istore_1 //將棧頂int型數值存入第二個本地變量2: iload_1 //將第二個int型本地變量推送至棧頂3: iinc 1, 1 //將指定int型變量增加指定值(i++, i--, i+=2)6: istore_2 //將棧頂int型數值存入第三個本地變量7: return
執行流圖為:

j++后面沒有其他的表達式,所以j不會自增。即,等號右邊最后一個j++不會執行自增運算。所以程序中不要出現像j=j++這樣的語句,因為它是無效的,應該用j+=1或者j=++j來代替。

由上面的圖可以看出,程序首先執行++j,所以在往下執行前加給j加1,所以此時,j=1,然后執行j++,j不會立即自增,所以j還是1,繼續下一個j++,j還是不會立即自增,但是現在就要執行前一個j++的++操作了,所以現在j=2,然后執行最后一個j++,同理,這個j不會立即++,所以此時j=2,之后便要為第二個j++執行++操作,所以此時的j=3。程序后面不在有表達式。所以程序結束,最后一個j++的++運算被拋棄了。
新聞熱點
疑難解答