Ao fazer um curso online, foi mencionado que se tivermos uma expressão condicional em Java que retorna de um lado byte
or short
e do outro lado final int
, então se o int
valor se encaixar em short
or byte
ele será reduzido para corresponder a esse tipo. Isso funciona apenas para o final int
e não para o final short
.
Gostaria de saber qual é a lógica por trás disso, por que o compilador permite uma conversão de estreitamento enquanto impede a outra? Parece ser lógico e correto, então por que essa limitação?
O código a seguir funciona e compila bem
public class Testing {
public static void main(String[] args) {
final int x = 99;
byte y = 33;
byte r = true ? x : y;
System.out.println(r);
}
}
Mas se eu mudar para short
, então recebo o erro de compilação
public class Testing {
public static void main(String[] args) {
final short x = 99;
byte y = 33;
byte r = true ? x : y;
// java: incompatible types: possible lossy conversion from short to byte
System.out.println(r);
}
}