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.

questionAnswers(3)

yourAnswerToTheQuestion