如果死代码在java中是非法的,为什么以下代码编译正常而没有任何编译时错误:
int i= 5;
while (i<2) {
//some code here
}
由于while条件没有得到满足,它永远不会进入循环,所以我认为这应该是死代码。但它正在编译完美。
答案 0 :(得分:3)
Java有一套非常严格定义的规则,用于在编译时定义可达性。 (请注意,程序永远不能完全了解。)
你的案例不是其中之一,所以汇编通过。
(如果可达性规则不断变化会令人烦恼,因为这会导致代码在连续版本更新时中断。)
答案 1 :(得分:1)
如果不运行程序,Java无法确定变量的值。如果它运行您的程序,则可能无法终止。因此,没有通用的方法来确定该循环是否总是运行。总是存在编译器出错的情况,因此它使用基本的启发式方法来处理简单的情况,并将其留在那里。