Tag: 取消装箱

为什么Java编译器有时允许取消装箱为空?

例如: 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能够以相同的错误编译这两种情况?