int anInt = null;
在编译时失败,但
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("" + getSomeVal());
}
}
public static int getSomeVal() {
return new Random().nextBoolean() ? 1 : null;
}
失败(通常)在运行时。试图返回只是null
也将导致编译错误,所以我认为有一些关于有多个路径,导致编译器推断null
可能是自动装箱的int
?为什么javac不能编译两个具有相同错误的案例?
第一种情况涉及将null“类型”隐式转换为int类型,r导致编译器错误。第二种情况隐式地将null转换为左手变量类型,该类型是表达式的类型而不是返回值。我想仔细阅读JLS 15.25“如果第二个和第三个操作数具有相同的类型(可能是空类型),那么这就是条件表达式的类型。”给你这个,因为java编译器不能给null一个int类型,所以被迫通过拆箱来使用Integer。非常明确的答案,谢谢。 – MilesHampson 2012-08-10 09:50:19