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 语句的条件始终为真,因此 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 的范围内。