哪个评价更快?我正在使用java语法,但任何编程语言都适用于这个问题。
while (1==1) {
}
while (true) {
}
我尝试用大循环测试它。结果差异太大,无法给我一个可靠的答案。
答案 0 :(得分:1)
您要做的是"微优化"。这不值得。任何体面的编译器都会生成相同的代码,因为1 == 1显然与true相同。即使它是不同的代码,这一点点改变也不会产生任何可衡量的差异。
答案 1 :(得分:0)
虽然@gnasher729's answer完全适合Java,但以下是如何自行查找。
请参阅以下类文件:
import java.util.Date;
public class SoOne {
public static void main(String... args) {
long counter = 1;
long start = new Date().getTime();
while ( 1 == 1 ) { // other class has while ( true )
counter += 1;
if ( counter % 1000000 == 0 ) {
System.out.println("after: "
+ ( new Date().getTime() - start )
+ ": " + counter
+ " per second: "
+ ( counter
/ ( new Date().getTime() - start )));
}
}
}
}
如果将此保存到f.ex. SoOne.java
,将行更改为while (true)
,将其保存为SoTrue.java
,然后通过javac SoOne.java SoTrue.java
进行编译,即可获得类文件。这些可以通过
javap -c SoOne.class >so.javap
javap -c SoTrue.class >st.javap
差异是
diff so.javap st.javap
1,3c1,3
< Compiled from "SoOne.java"
< public class SoOne {
< public SoOne();
---
> Compiled from "SoTrue.java"
> public class SoTrue {
> public SoTrue();
因此编译器确实删除了两个检查。另请参阅https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize有关何时优化。