一文帶你搞懂Java中i++ 和 ++i的區(qū)別
正文
1、i++ 和 ++i 有什么區(qū)別
首先,先看兩個(gè)小例子:
到這里先停一下,大家自己思考半分鐘,覺得打印結(jié)果是什么。
然后,我們來看看結(jié)果。
沒錯(cuò),第一個(gè)打印是 6 和 5,第二個(gè)打印是 6 和 6。
這就是他們的區(qū)別,解釋下原因:
i++:這是后綴遞增運(yùn)算符,先將當(dāng)前值賦給變量,然后再遞增。
++i:這是前綴遞增運(yùn)算符,先遞增變量的值,然后再賦給變量。
2、i++ 和 ++i 誰的效率高
這個(gè)問題我其實(shí)蒙對了,我說是一樣高的,但是主管問我原因,我沒答上來。
后來告訴我了答案,就是它們被編譯器和JVM優(yōu)化后的字節(jié)碼是相同的,所以效率一樣高。
3、字節(jié)碼指令
然后我就去找了字節(jié)碼指令的用法,將上面的案例以及兩者效率是否一樣進(jìn)行了驗(yàn)證。
指令用法很簡單,定位到class文件所在目錄,使用
javap -verbose
命令執(zhí)行即可。
1)、從字節(jié)碼看區(qū)別
我們將前面那個(gè)案例,通過字節(jié)碼指令輸出到txt文件中。
在文檔編輯器中找到main方法,對這兩個(gè)字節(jié)碼內(nèi)容進(jìn)行比對,發(fā)現(xiàn)確實(shí)有如下不同。
可以看到紅框部分,剛好佐證了上面解釋的區(qū)別,i++會先使用當(dāng)前值,然后再遞增;而++i會在遞增之后立即使用新值,通過字節(jié)碼看起來還是挺明顯的。
2)、從字節(jié)碼看誰的效率高
我們依然寫個(gè)for循環(huán)的小例子來做驗(yàn)證。
將這兩個(gè)類編譯后的class通過字節(jié)碼指令輸出到txt中
接下來我們就可以比對下結(jié)果了
可以看到,main方法開始,從上到下的字節(jié)碼是完全一樣的,沒任何不同。
所以,i++ 和 ++i 的效率本質(zhì)是一樣高的。
總結(jié)
以上就是一文帶你搞懂Java中i++ 和 ++i的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Java i++ 和 ++i的區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程
這篇文章主要為大家詳細(xì)介紹了win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程,感興趣的小伙伴們可以參考一下2016-06-06Java 數(shù)組交集的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java 數(shù)組交集的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明
這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Spring Boot 工程的創(chuàng)建和運(yùn)行(圖文)
這篇文章主要介紹了Spring Boot 工程的創(chuàng)建和運(yùn)行(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02Java自定義注解實(shí)現(xiàn)Redis自動(dòng)緩存的方法
本篇文章主要介紹了Java自定義注解實(shí)現(xiàn)Redis自動(dòng)緩存的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04Java位掩碼控制權(quán)限與(&)或(|)非(~)、>的介紹
今天小編就為大家分享一篇關(guān)于Java位掩碼控制權(quán)限與(&)或(|)非(~)、>的介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03SpringMVC接收與響應(yīng)json數(shù)據(jù)的幾種方式
這篇文章主要給大家介紹了關(guān)于SpringMVC接收與響應(yīng)json數(shù)據(jù)的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用springmvc具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03