Java开发者们for(;;)和while(true)的区别应该了解下
【摘要】
在我们阅读源码的时候经常会看到源码中会有下面这样的代码,当我看到这段代码自然而然就明白,这不就是一个无线循环吗?
为什么不使用while呢?我们不禁疑问?那么带着这样的疑问,我们来探索一下吧 ...
在我们阅读源码的时候经常会看到源码中会有下面这样的代码,当我看到这段代码自然而然就明白,这不就是一个无线循环吗?
为什么不使用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判断则编译器会生成好几条汇编指令。
小伙伴们,你们喜欢哪一种方式呢?请在文章下面留下你的看法吧!
文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。
原文链接:springlearn.blog.csdn.net/article/details/81075688
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)