Java:for(;;)vs. while(true)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

标准while(true)循环和for(;;)?之间有什么区别?

编译后有没有,或者都会映射到相同的字节码?

提问于
用户回答回答于

在语义上,它们是完全等价的。这是一个品味问题,但我认为while(true)看起来更干净,并且乍一看更易于阅读和理解。在Java中,它们都不会导致编译器警告。

在字节码级别,它可能取决于编译器和优化级别,但原则上所发射的代码应该是相同的。

在我的编译器上,使用Bytecode Outline插件,字节码for(;;){}看起来像这样:

   L0
    LINENUMBER 6 L0
   FRAME SAME
    GOTO L0

字节码while(true){}看起来像这样:

   L0
    LINENUMBER 6 L0
   FRAME SAME
    GOTO L0

所以是的,至少对我而言,它们是相同的。

用户回答回答于

这取决于你使用哪一个。因为它们等于编译器。

创建文件:

// first test
public class Test {
    public static void main(String[] args) {
        while (true) {
            System.out.println("Hi");
        }
    }
}

编译:

javac -g:none Test.java
rename Test.class Test1.class

创建文件:

// second test
public class Test {
    public static void main(String[] args) {
        for (;;) {
            System.out.println("Hi");
        }
    }
}

编译:

javac -g:none Test.java
mv Test.class Test2.class

比较:

diff -s Test1.class Test2.class
Files Test1.class and Test2.class are identical

扫码关注云+社区