在我們閱讀源碼的時候經常會看到源碼中會有下面這樣的代碼,當我看到這段代碼自然而然就明白,這不就是一個無線循環嗎?
為什麼不使用while呢?我們不禁疑問?那麼帶著這樣的疑問,我們來探索一下吧 !
for(;;)和while(true)區別
從寓意上來看,兩種寫法都是無限循環
從效率上看,while(true)每次循環要判斷循環條件,for(;;)循環沒有判斷,理論上節省機器指令。
下面我們就通過查看編譯後的代碼,來證明以下for(;;)和while(true)的區別
首先整理一個帶編譯的測試代碼,如下
通過javac 將Test.java 編譯成Test.class 字節碼文件
在通過javap -c Test 查看下編譯後的字節碼文件,如下圖
結論
無論是for(;;)還是while(true),在Java中都是優化成goto沒區別,結果來看,兩種方法經過編譯優化後,是一樣的效果.
那麼問題又來了,為什麼有的人喜歡寫成for(;;)的形式呢?
這個問題,我也疑惑,最後通過谷歌得到一個結果:
對於早期的C語言,兩種寫法性能會不一樣。for語句編譯器會優化成一條彙編指令,而while判斷則編譯器會生成好幾條彙編指令。
小夥伴們,你們喜歡哪一種方式呢?請在文章下面留下你的看法吧!
閱讀更多 東方既白 的文章