Saída inesperada ao usar um operador ternário e variável final
Considere este trecho 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');
}
Ao executar esse código, eu esperaria ver doisX
no seu console. No entanto, a saída real é:
88
X
Se dermos uma olhada noEspecificações Java relativas ao Operador Ternário, nós achamos isso
Se um dos operandos for do tipo T, em que T é byte, curto ou char, e o outro operando for uma expressão constante do tipo int, cujo valor é representável no tipo T, o tipo da expressão condicional será T.
Portanto, a primeira saída considera o'X'
char como umint
, é por isso que imprime88
.
No entanto, não sei ao certo por que o uso definal
altera o comportamento para a segunda saída.