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