总之,从性能角度来看,while(true)和for(;;)之间没有显著区别。在选择时,应主要考虑代码的可读性和维护性。
可以看到,两个用法,其实都是通过goto来干的,所以,这两者其实是没啥区别的。用哪个都行 有人愿意用while(true)因为他更清晰的看出来这里是个无限循环。有人愿意用for(;;),因为有些IDE对于while(true)会给出警告。
对比之下,for (;;)指令少,不占用寄存器,而且没有判断跳转,比while (1)好。 也就是说两者在在宏观上完全一样的逻辑,但是底层完全不一样,for相对于来说更加简洁明了。
而用for (;;)来表达不写循环条件(也就是循环体内不用break或goto就会是无限循环)则非常直观,这就是for语句本身的功能,而且不需要写任何魔数。 所以,这个写法就流传下来了。 顺带一提,在Java里我是倾向于写while (true)的,不过我也不介意别人在他们自己的项目里写for (;😉。 至于Java里的for (;;)与whil...
如果是一个明确范围的,用for循环非常明确;如果是不明确要做多少次,用while循环较为合适;do…while...
至于Java里的for (;;)与while (true),哪个更快? 这种规范没有规定的问题,答案都是“看实现”,毕竟实现只要保证语义符合规范就行了,而效率并不在规范管得着的范畴内。 以Oracle/Sun JDK8u / OpenJDK8u的实现来看,首先看javac对下面俩语句的编译结果: public void foo() { int i = 0; while (true) ...
for(;;)和while(true)区别 从寓意上来看,两种写法都是无限循环 从效率上看,while(true)每次循环要判断循环条件,for(;;)循环没有判断,理论上节省机器指令。那么问题又来了,为什么有的人喜欢写成for(;;)的形式呢 这个问题,我也疑惑,最后通过谷歌得到一个结果:对于早期的C语言,两种写法性能会不...
在看并发源码的时候,很多时候源码中都使用for(;;)而不是使用while(true),这两个有什么区别吗?首先“死循环”有两种写法:for(;;)和while(true),在java里面,最简单有效的办法就是打印字节码看一下 代码语言:javascript 复制 字节码一模一样,能有啥区别?因此,在java里面,就看个人的爱好了,二者没区别!
最近在阅读JUC源码的时候,由于多线程并发时情况比较复杂,所以源码中经常出现一些无限循环用于等待确保或是某些目的的完成,通常我一般无限循环都是用while(true),但是我发现在concurrent包中经常用for(;;)来实现。这让我产生了困惑,难道for(;;)会比while(true)性能更好一些吗?于是我决定自己分别编译比较一下。