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


源代碼

  int i = 0;

i = i++;

System.out.println(i);

 

int j=5;

j=++j;

System.out.println(j);

 

反編譯:

 

i++內存表現:

Code:

 

       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更深入的操作機制,也就是說不了解在什么情況下會觸發本地變量值推入棧頂的操作。待以后解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM