【发布时间】:2014-10-23 23:52:56
【问题描述】:
java 编译器或运行时(或任何其他语言编译器)是否足够聪明,可以实现分支 3 永远不会发生并对其进行优化?我已经在许多初级开发人员那里看到过这种“防御性编程”,我想知道这种负担是否会留在字节码中。
import java.util.Random;
class Example
{
public static void main(String[] args) {
int x = new Random().nextInt() % 10;
if ( x < 5 )
{
System.out.println("Case 1");
}
else
if ( x >= 5 )
{
System.out.println("Case 2");
}
else
{
System.out.println("Case 3");
}
}
}
甚至这个更直白的案例
boolean bool = new Random().nextBoolean();
if ( bool )
{
System.out.println("Case 1");
}
else
if ( bool )
{
System.out.println("Case 2");
}
【问题讨论】:
-
JITC 可能会解决这个问题。或者至少会从分析中发现它非常罕见,因此以某种方式优化测试并将实际代码移出线。 (javac 将其优化掉是非常不寻常的。)
-
旁白:请致电
nextInt(n)而不是nextInt() % n。它处理各种棘手的情况。 docs.oracle.com/javase/7/docs/api/java/util/…
标签: java optimization dead-code unreachable-code