Java: for(;;) vs. while(true)
2022-08-31 13:57:09
标准循环 和 ?while(true)
for(;;)
是否有任何,或者编译后两者都将映射到相同的字节码?
标准循环 和 ?while(true)
for(;;)
是否有任何,或者编译后两者都将映射到相同的字节码?
从语义上讲,它们是完全等价的。这是一个品味问题,但我认为看起来更干净,乍一看更容易阅读和理解。在Java中,它们都不会引起编译器警告。while(true)
在字节码级别,它可能取决于编译器和优化级别,但原则上发出的代码应该是相同的。
编辑:
在我的编译器上,使用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