¿Por qué el compilador de Java no entiende que esta variable siempre se inicializa?
class Foo{
public static void main(String args[]){
final int x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
El compilador de Java entiende la condición de la sentencia if siempre es verdadera y, por lo tanto, y siempre se inicializará. No hay error de compilación, como se esperaba.
class Bar{
public static void main(String args[]){
final int x;
x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Pero cuando rompo la declaración y la inicialización de x en dos líneas, el compilador no parece darse cuenta de que la condición es siempre cierta y y siempre se inicializará.
final int x;
x=101;
byte b;
b=x;
System.out.println(b);
Lo mismo sucede aquí y el compilador da un error de pérdida de precisión.
final int x=101;
byte b;
b=x;
System.out.println(b);
De nuevo, el compilador puede entender que x está dentro del rango de b.