Roh*_*ain 4 java eclipse if-statement this dead-code
通过我的一个队友写的一些旧代码,我发现这个奇怪的代码:
if (...) {
// some code
} else if (this == null) {
System.out.println("I expected this to be dead code!");
}
Run Code Online (Sandbox Code Playgroud)
奇怪的不是它.AFAIK,this == null条件永远不会true,编译器应该是显而易见的,因为它知道this和null两者的含义.但令我惊讶的是,这并没有标记为死代码.
我在Eclipse中通过命令行尝试了这段代码.我运行以下命令来启用所有警告:
javac -Xlint:all MyClass.java
Run Code Online (Sandbox Code Playgroud)
它还没有发出任何警告.
相反,如果我将else if块更改为:
else if (false) {
System.out.println("As expected, this is dead code");
}
Run Code Online (Sandbox Code Playgroud)
正如我所料,内部声明被标记为死代码.
那为什么会这样呢?这只会导致我认为可能有一些条件,其中this居然能null.是吗?
分析考虑了陈述的结构.除了对while,do和for条件表达式具有常量值true的语句的特殊处理外,在流分析中不考虑表达式的值.
所以这不被认为是"无法到达".
也看到这个讨论有关不到的代码错误和死码警告.
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |