Почему компилятор Java иногда допускает распаковку null?

Например:

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 не может скомпилировать оба случая с одной и той же ошибкой?

16
задан Bill the Lizard 10 August 2012 в 13:33
поделиться