Dlaczego kompilator Java nie rozumie tej zmiennej jest zawsze inicjowany?
class Foo{
public static void main(String args[]){
final int x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Kompilator Java rozumie warunek instrukcji if jest zawsze prawdziwy i dlatego y będzie zawsze inicjowane. Bez błędu kompilacji, zgodnie z oczekiwaniami.
class Bar{
public static void main(String args[]){
final int x;
x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Ale gdy złamam deklarację i inicjalizację x na dwie linie, kompilator nie wydaje się, aby warunek był zawsze prawdziwy, a y będzie zawsze inicjowane.
final int x;
x=101;
byte b;
b=x;
System.out.println(b);
To samo dzieje się tutaj, a kompilator powoduje błąd precyzji.
final int x=101;
byte b;
b=x;
System.out.println(b);
Ponownie kompilator może zrozumieć, że x jest w zakresie b.