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

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

我们看下这两者的字节码

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

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

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

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

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


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


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

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


上一篇:一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)


下一篇:Qt编写自定义控件34-磁盘容量统计