このコードが「到達不能コード」エラーを出さないのはなぜですか?ブール値はtrueまたはfalseにしかなりません。
public static void main(String args[]) {
boolean a = false;
if (a == true) {
} else if (a == false) {
} else {
int c = 0;
c = c + 1;
}
}
From JLS 14.21。Unreachable Statements
到達できないためにステートメントを実行できない場合は、コンパイル時エラーです。
そして
Else-statementは、if-then-elseステートメントに到達できる場合にのみ到達可能です。
If-then-elseステートメントに到達できます。そのため、コンパイラーはその定義から、elseステートメントが到達可能であると見なします。
注:興味深いことに、次のコードもコンパイルされます
// This is ok
if (false) { /* do something */ }
これはwhile
には当てはまりません
// This will not compile
while (false) { /* do something */ }
while
の到達可能性の定義が異なるため(強調は私):
含まれているステートメントは、whileステートメントが到達可能であり、条件式が値がfalseの定数式ではない場合に到達可能です。