¿Por qué el compilador de Java a veces permite el desempaquetado de null?

Por ejemplo:

int anInt = null;

falla en tiempo de compilación pero

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

falla (generalmente) en tiempo de ejecución. Tratando de volver solonull También resultará en un error de compilación, así que asumo que hay algo acerca de tener múltiples rutas que hacen que el compilador deduzca esonull es potencialmente un autoboxedint? ¿Por qué javac no puede fallar en compilar ambos casos con el mismo error?

Respuestas a la pregunta(3)

Su respuesta a la pregunta