public class Test1 {
static final int i;
static{
if(3<2){
i = 0;
}
}
}public class Test2 {
static final int i;
static{
if(3>2){
i = 0;
}
}
}类Test1编译失败,类Test2编译成功。
有人能告诉我编译器是如何在if条件下计算表达式的吗?
发布于 2012-12-09 18:08:49
根据Java Language Specification的说法,if语句的条件部分中的表达式是编译时表达式。在Test1编译器知道我永远不会被初始化,这就是为什么它会报错。在第二种情况下,编译器知道我将被初始化。如果将编译时表达式替换为更动态的表达式,两个类都将无法编译,因为编译器不能保证我已被初始化。
https://stackoverflow.com/questions/13786424
复制相似问题