Почему if / else if / else для простого логического значения не дает ошибку " недостижимый код
почему этот код не дает ошибку "недостижимый код"? Поскольку логическое значение может быть 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;
}
}
2 ответов
С JLS 14.21. Недостижимые Утверждения
Это-ошибка времени компиляции, если оператор не может быть выполнен, потому что это недостижимо.
и
оператор else достижим, если оператор 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.
что касается компилятора, он дает только недостижимую ошибку кода, если есть возможность оставить область метода без выполнения части кода. В вашем случае, да else
блок никогда не будет выполнен, но ожидание компилятора показать ошибку здесь похоже на ожидание компилятора отладить ваш код для возможных логических ошибок. В качестве примера возьмем следующий код.
public static boolean method()
{
boolean flag = false;
if(flag == true)
{
return true;
}
else if(flag == false)
{
return false;
}
else
{
return true & false; //comment in this line to get error
}
//return true | false; comment out this line to get error
}