Почему 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
}