Por que o compilador Java não entende essa variável é sempre inicializado?
class Foo{
public static void main(String args[]){
final int x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
O compilador Java entende que a condição da instrução if é sempre verdadeira e, portanto, y sempre será inicializada. Nenhum erro de compilação, conforme esperado.
class Bar{
public static void main(String args[]){
final int x;
x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Mas quando eu quebro a declaração e a inicialização de x em duas linhas, o compilador parece não entender que a condição é sempre verdadeira e y sempre será inicializada.
final int x;
x=101;
byte b;
b=x;
System.out.println(b);
A mesma coisa acontece aqui eo compilador dá uma perda de erro de precisão.
final int x=101;
byte b;
b=x;
System.out.println(b);
Novamente, o compilador pode entender que x está dentro do intervalo de b.