Почему компилятор Java не понимает, что эта переменная всегда инициализируется?
class Foo{
public static void main(String args[]){
final int x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Компилятор Java понимает условие оператора if всегда true и поэтому y всегда будет инициализирован. Нет ошибки компиляции, как ожидалось.
class Bar{
public static void main(String args[]){
final int x;
x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Но когда я разбиваю объявление и инициализацию x на две строки, компилятор, похоже, не понимает, что условие всегда выполняется и y всегда будет инициализироваться.
final int x;
x=101;
byte b;
b=x;
System.out.println(b);
Здесь происходит то же самое, и компилятор выдает ошибку потери точности.
final int x=101;
byte b;
b=x;
System.out.println(b);
Опять же, компилятор может понять, что x находится внутри диапазона b.