Dlaczego kompilator Java czasami pozwala na odpakowanie wartości null?

Na przykład:

int anInt = null;

kończy się niepowodzeniem w czasie kompilacji, ale

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;
}

kończy się niepowodzeniem (zwykle) w czasie wykonywania. Próbuję wrócićnull spowoduje również błąd kompilacji, więc zakładam, że jest coś w posiadaniu wielu ścieżek, które powodują, że kompilator to wnioskujenull jest potencjalnie autoboksycznyint? Dlaczego javac nie może skompilować obu przypadków z tym samym błędem?

questionAnswers(3)

yourAnswerToTheQuestion