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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage