java boolean unreachable-code

java - ¿Por qué un if/else if/else para un booleano simple no da un error de "código inalcanzable"?



unreachable-code (1)

¿Por qué este código no da un error de "código inalcanzable"? Dado que un booleano solo puede ser verdadero o falso.

public static void main(String args[]) { boolean a = false; if (a == true) { } else if (a == false) { } else { int c = 0; c = c + 1; } }


De JLS 14.21. Declaraciones inalcanzables

Es un error en tiempo de compilación si una instrucción no se puede ejecutar porque no se puede acceder.

y

La declaración else es accesible si la declaración if-then-else es accesible.

Su declaración if-then-else es accesible. Entonces, según la definición, el compilador cree que la declaración else es accesible.

Nota: Curiosamente, el siguiente código también compila

// This is ok if (false) { /* do something */ }

Esto no es cierto por un while

// This will not compile while (false) { /* do something */ }

porque la definición de accesibilidad para while es diferente (énfasis mío):

La declaración contenida es accesible si la declaración while es accesible y la expresión de condición no es una expresión constante cuyo valor es falso .