Java开发者们for(;;)和while(true)的区别应该了解下

在我们阅读源码的时候经常会看到源码中会有下面这样的代码,当我看到这段代码自然而然就明白,这不就是一个无线循环吗?

为什么不使用while呢?我们不禁疑问?那么带着这样的疑问,我们来探索一下吧 !


for(;;)和while(true)区别
  • 从寓意上来看,两种写法都是无限循环
  • 从效率上看,while(true)每次循环要判断循环条件,for(;;)循环没有判断,理论上节省机器指令。

下面我们就通过查看编译后的代码,来证明以下for(;;)和while(true)的区别

  1. 首先整理一个带编译的测试代码,如下
  2. 通过javac 将Test.java 编译成Test.class 字节码文件
  3. 在通过javap -c Test 查看下编译后的字节码文件,如下图

结论

无论是for(;;)还是while(true),在Java中都是优化成goto没区别,结果来看,两种方法经过编译优化后,是一样的效果.


那么问题又来了,为什么有的人喜欢写成for(;;)的形式呢

这个问题,我也疑惑,最后通过谷歌得到一个结果:

对于早期的C语言,两种写法性能会不一样。for语句编译器会优化成一条汇编指令,而while判断则编译器会生成好几条汇编指令。
小伙伴们,你们喜欢哪一种方式呢?请在文章下面留下你的看法吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西魏陶渊明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值