喜欢看源码的同学可能都会发现,很多组件的作者在做死循环时,都喜欢用for( ; ; ),while(true)或者while(1)也能实现死循环,为啥大佬们都用for( ; ; )呢
我们看下这两者的字节码
public class ForTest { public static void main(String[] args) { for (;;){ System.out.println("666"); } } }
public class WhileTrueTest { public static void main(String[] args) { while (true) { System.out.println("666"); } } }
很失望,他们的字节码是一毛一样的
后来我查阅了很多书籍(搜了很多博客),发现是这么回事
for( ; ; ),这在编译器看来,两个";"代表空语句,编译器在编译时会优化掉,直接进入循环体
而对于while(true),编译器每次都会对true做一次判断,尽管是true,但是编译器不会直接进入循环体,就造成很多次无效判断