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的范围内。
https://stackoverflow.com/questions/13235559
复制相似问题