05.02 Java開發者們for(;;)和while(true)的區別應該瞭解下

在我們閱讀源碼的時候經常會看到源碼中會有下面這樣的代碼,當我看到這段代碼自然而然就明白,這不就是一個無線循環嗎?

為什麼不使用while呢?我們不禁疑問?那麼帶著這樣的疑問,我們來探索一下吧 !

Java開發者們for(;;)和while(true)的區別應該瞭解下


for(;;)和while(true)區別

  • 從寓意上來看,兩種寫法都是無限循環

  • 從效率上看,while(true)每次循環要判斷循環條件,for(;;)循環沒有判斷,理論上節省機器指令。

下面我們就通過查看編譯後的代碼,來證明以下for(;;)和while(true)的區別

  1. 首先整理一個帶編譯的測試代碼,如下

Java開發者們for(;;)和while(true)的區別應該瞭解下

  1. 通過javac 將Test.java 編譯成Test.class 字節碼文件

  2. 在通過javap -c Test 查看下編譯後的字節碼文件,如下圖

Java開發者們for(;;)和while(true)的區別應該瞭解下

結論

無論是for(;;)還是while(true),在Java中都是優化成goto沒區別,結果來看,兩種方法經過編譯優化後,是一樣的效果.


那麼問題又來了,為什麼有的人喜歡寫成for(;;)的形式呢?

這個問題,我也疑惑,最後通過谷歌得到一個結果:

對於早期的C語言,兩種寫法性能會不一樣。for語句編譯器會優化成一條彙編指令,而while判斷則編譯器會生成好幾條彙編指令。

小夥伴們,你們喜歡哪一種方式呢?請在文章下面留下你的看法吧!

Java開發者們for(;;)和while(true)的區別應該瞭解下


分享到:


相關文章: