チームメイトの 1 人が書いた古いコードを調べると、次のような非常に奇妙なコードが見つかりました。
if (...) {
// some code
} else if (this == null) {
System.out.println("I expected this to be dead code!");
}
変ですね。私の知る限り、this == null
条件はとの両方true
の意味を知っているため、コンパイラーには明らかなはずです。しかし驚いたことに、それはデッド コードとしてマークされていませんでした。this
null
このコードをEclipseとコマンドラインの両方で試しました。次のコマンドを実行して、すべての警告を有効にしました。
javac -Xlint:all MyClass.java
それでも警告は出ませんでした。
逆に、else if
ブロックを次のように変更すると:
else if (false) {
System.out.println("As expected, this is dead code");
}
予想通り、内部のステートメントはデッド コードとしてマークされました。
では、なぜこのような振る舞いをするのでしょうか? これは、this
実際にnull
. それは...ですか?