java基礎面試題之:i++與++i的區別

源代碼jvm

  int i = 0;spa

i = i++;excel

System.out.println(i);blog

 

int j=5;內存

j=++j;編譯

System.out.println(j);class

 

反編譯:變量

 

i++內存表現:im

Code:img

 

       0: iconst_0

       1: istore_1

       2: iload_1

       3: iinc          1, 1

       6: istore_1

++i的內存表現:

Code:

      14: iconst_5

      15: istore_2

      16: iinc          2, 1

      19: iload_2

      20: istore_2

 

我用excel對比了一下:

 

區別很明顯了:

i++在本地變量加了1以後,直接將棧頂數值推送到了本地變量,覆蓋了+1的操做,因此i++缺乏了一個將本地變量推送到棧頂的步驟

++i是本地變量加1,再將本地變量推送到棧頂,再由棧頂推送到本地變量,完美的完成了增長操做

留下一個疑惑:

 int i = 0; i = i++ + i++;

System.out.print(i) ;

打印結果是1,看了反編譯結果,i++以後有一次將本地變量值推入棧頂的操做,第二次i++無效

如今的問題是不知道jvm更深刻的操做機制,也就是說不了解在什麼狀況下會觸發本地變量值推入棧頂的操做。待之後解決。

相關文章
相關標籤/搜索