Salida inesperada cuando se usa un operador ternario y una variable final
Considere este fragmento de código:
public static void main(String[] args) {
int z1 = 0;
final int z2 = 0;
System.out.println(false ? z1 : 'X');
System.out.println(false ? z2 : 'X');
}
Al ejecutar este código, esperaría ver dosX
en tu consola Sin embargo, la salida real es:
88
X
Si echamos un vistazo a laEspecificaciones de Java sobre el operador ternario, Encontramos eso
Si uno de los operandos es de tipo T donde T es byte, short o char, y el otro operando es una expresión constante de tipo int cuyo valor es representable en tipo T, entonces el tipo de expresión condicional es T.
Entonces el primer resultado considera el'X'
char como unint
por eso imprime88
.
Sin embargo, no estoy seguro de entender por qué el uso definal
cambia el comportamiento para la segunda salida.