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 .