从字节码角度解释i++和++i
生活随笔
收集整理的這篇文章主要介紹了
从字节码角度解释i++和++i
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@Testpublic void test2(){int i = 10;i = i++;System.out.println(i);}
代碼片段如上。
通過class文件反編譯得到字節碼指令:
可以看到先是將10推到棧幀里的操作數棧的最底部,隨后將其彈出到局部變量表的索引為1的位置,索引為0為this,再把局部變量表里索引為1的位置的數字放到操作數棧的最底部,隨后進行局部變量表里的加一操作,此時確實局部變量表里索引為1的地方存儲的是數字11,但是隨即操作數棧里的頂部的10彈出又寫回了局部變量表索引為1處,這時候調用getstatic指令調用指定類的靜態域(out),并將其壓入棧頂,又把局部變量表里的1放到了操作數棧頂,然后調用實例方法打印出10。
如下是++i的字節碼指令:
可以看見對調了isstore_1和iinc 1 by 1達到了不一樣的效果。
總結
以上是生活随笔為你收集整理的从字节码角度解释i++和++i的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HSDIS工具在macbook M1电脑
- 下一篇: golang中如何抓取panic让程序正