Warum versteht der Java-Compiler nicht, dass diese Variable immer initialisiert wird?
class Foo{
public static void main(String args[]){
final int x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Der Java-Compiler versteht die Bedingung der if-Anweisung immer als wahr und daher wird y immer initialisiert. Kein Kompilierungsfehler, wie erwartet.
class Bar{
public static void main(String args[]){
final int x;
x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Aber wenn ich die Deklaration und Initialisierung von x in zwei Zeilen zerlege, scheint der Compiler nicht zu verstehen, dass die Bedingung immer wahr ist und y immer initialisiert wird.
final int x;
x=101;
byte b;
b=x;
System.out.println(b);
Das Gleiche passiert hier und der Compiler gibt einen Genauigkeitsverlustfehler aus.
final int x=101;
byte b;
b=x;
System.out.println(b);
Wieder kann der Compiler verstehen, dass x innerhalb des Bereichs von b liegt.