一文帶你搞懂Java中i++ 和 ++i的區(qū)別
正文
1、i++ 和 ++i 有什么區(qū)別
首先,先看兩個(gè)小例子:


到這里先停一下,大家自己思考半分鐘,覺(jué)得打印結(jié)果是什么。
然后,我們來(lái)看看結(jié)果。


沒(méi)錯(cuò),第一個(gè)打印是 6 和 5,第二個(gè)打印是 6 和 6。
這就是他們的區(qū)別,解釋下原因:
i++:這是后綴遞增運(yùn)算符,先將當(dāng)前值賦給變量,然后再遞增。
++i:這是前綴遞增運(yùn)算符,先遞增變量的值,然后再賦給變量。
2、i++ 和 ++i 誰(shuí)的效率高
這個(gè)問(wèn)題我其實(shí)蒙對(duì)了,我說(shuō)是一樣高的,但是主管問(wèn)我原因,我沒(méi)答上來(lái)。
后來(lái)告訴我了答案,就是它們被編譯器和JVM優(yōu)化后的字節(jié)碼是相同的,所以效率一樣高。
3、字節(jié)碼指令
然后我就去找了字節(jié)碼指令的用法,將上面的案例以及兩者效率是否一樣進(jìn)行了驗(yàn)證。
指令用法很簡(jiǎn)單,定位到class文件所在目錄,使用
javap -verbose命令執(zhí)行即可。
1)、從字節(jié)碼看區(qū)別
我們將前面那個(gè)案例,通過(guò)字節(jié)碼指令輸出到txt文件中。


在文檔編輯器中找到main方法,對(duì)這兩個(gè)字節(jié)碼內(nèi)容進(jìn)行比對(duì),發(fā)現(xiàn)確實(shí)有如下不同。
可以看到紅框部分,剛好佐證了上面解釋的區(qū)別,i++會(huì)先使用當(dāng)前值,然后再遞增;而++i會(huì)在遞增之后立即使用新值,通過(guò)字節(jié)碼看起來(lái)還是挺明顯的。

2)、從字節(jié)碼看誰(shuí)的效率高
我們依然寫(xiě)個(gè)for循環(huán)的小例子來(lái)做驗(yàn)證。


將這兩個(gè)類(lèi)編譯后的class通過(guò)字節(jié)碼指令輸出到txt中


接下來(lái)我們就可以比對(duì)下結(jié)果了

可以看到,main方法開(kāi)始,從上到下的字節(jié)碼是完全一樣的,沒(méi)任何不同。
所以,i++ 和 ++i 的效率本質(zhì)是一樣高的。
總結(jié)
以上就是一文帶你搞懂Java中i++ 和 ++i的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Java i++ 和 ++i的區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java 集合實(shí)現(xiàn)分頁(yè)的方法(業(yè)務(wù)代碼實(shí)現(xiàn)分頁(yè))
在Java開(kāi)發(fā)中,有些場(chǎng)景比較復(fù)雜,受限制,不好在sql查詢(xún)層面實(shí)現(xiàn)分頁(yè),需要在查詢(xún)的list結(jié)果后,將list分頁(yè)返回,如何實(shí)現(xiàn)呢,帶著這個(gè)問(wèn)題一起通過(guò)本文學(xué)習(xí)吧2025-02-02
ThreadLocal線程在Java框架中的應(yīng)用及原理深入理解
這篇文章主要介紹了ThreadLocal在Java框架中的應(yīng)用及原理深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Java?json轉(zhuǎn)換實(shí)體類(lèi)(JavaBean)及實(shí)體類(lèi)(JavaBean)轉(zhuǎn)換json代碼示例
這篇文章主要介紹了兩種常見(jiàn)的JSON與Java實(shí)體類(lèi)相互轉(zhuǎn)換的方法,分別是使用庫(kù)Jackson、Gson、Fastjson和在線工具,無(wú)論是將JSON轉(zhuǎn)換為Java實(shí)體類(lèi)還是將Java實(shí)體類(lèi)轉(zhuǎn)換為JSON,這些方法都能顯著簡(jiǎn)化開(kāi)發(fā)過(guò)程,需要的朋友可以參考下2024-12-12
Java創(chuàng)建非阻塞的HTTP服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Java創(chuàng)建非阻塞的HTTP服務(wù)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04
使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳
這篇文章主要為大家詳細(xì)介紹了使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Java并發(fā)編程volatile關(guān)鍵字的作用
這篇文章主要介紹了Java并發(fā)編程volatile關(guān)鍵字的作用,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之醫(yī)院心理咨詢(xún)問(wèn)診系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+Spring+Maven+mybatis+Vue+mysql開(kāi)發(fā)的醫(yī)院心理咨詢(xún)問(wèn)診系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有心理咨詢(xún)問(wèn)診該有的所有功能,感興趣的朋友快來(lái)看看吧2022-01-01
Java生成格式化的Word統(tǒng)計(jì)報(bào)告
這篇文章主要為大家詳細(xì)介紹了如何使用Java從數(shù)據(jù)庫(kù)查詢(xún)圖書(shū)數(shù)據(jù),并生成格式化的Word統(tǒng)計(jì)報(bào)告,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-04-04

