for( ; ; )和while(true)的区别

简介: 喜欢看源码的同学可能都会发现,很多组件的作者在做死循环时,都喜欢用for( ; ; ),while(true)或者while(1)也能实现死循环,为啥大佬们都用for( ; ; )呢

喜欢看源码的同学可能都会发现,很多组件的作者在做死循环时,都喜欢用for( ; ; ),while(true)或者while(1)也能实现死循环,为啥大佬们都用for( ; ; )呢

我们看下这两者的字节码

public class ForTest {
    public static void main(String[] args) {
        for (;;){
            System.out.println("666");
        }
    }
}

20210324100432104.png

public class WhileTrueTest {
    public static void main(String[] args) {
        while (true) {
            System.out.println("666");
        }
    }
}

20210324100520144.png

很失望,他们的字节码是一毛一样的


后来我查阅了很多书籍(搜了很多博客),发现是这么回事


for( ; ; ),这在编译器看来,两个";"代表空语句,编译器在编译时会优化掉,直接进入循环体

而对于while(true),编译器每次都会对true做一次判断,尽管是true,但是编译器不会直接进入循环体,就造成很多次无效判断


相关文章
|
Python
a is b 为 True,a == b 一定为 True 吗?
a is b 为 True,a == b 一定为 True 吗?
114 0
|
应用服务中间件
reloadable=“false“ 的作用
reloadable=“false“ 的作用
131 0
[]==![](true)、{}==!{}(false)
[]==![](true)、{}==!{}(false)
101 0
|
JavaScript 数据安全/隐私保护 前端开发
js中return,return true,return false三者的用法及区别
return其实就是return undefined; 1.语法及返回方式 ①返回控制与函数结果         语法为:return 表达式;         语句结果函数的执行,返回调用函数,而且把表达式的值作为函数结果返回出去 ②返回控制无函数结果         语法为:return;         在大多数情况下,为事件处理函数如果让其返回false,可以防止默认的事件行为.
1627 0
|
Java 程序员
for(;;)和while(true)的区别
for(;;)和while(true)的区别
131 0
for(;;)和while(true)的区别
|
Java 编译器 C语言
for(;;)和while(true)的区别
for(;;)和while(true)的区别
140 0
for(;;)和while(true)的区别
|
缓存 Java API
为什么 Java 中“1000==1000”为false,而”100==100“为true?
为什么 Java 中“1000==1000”为false,而”100==100“为true?