Booleanos, operadores condicionales y autoboxing

¿Por qué esto arrojaNullPointerException

public static void main(String[] args) throws Exception {
    Boolean b = true ? returnsNull() : false; // NPE on this line.
    System.out.println(b);
}

public static Boolean returnsNull() {
    return null;
}

mientras esto no

public static void main(String[] args) throws Exception {
    Boolean b = true ? null : false;
    System.out.println(b); // null
}

?

La solución es, por cierto, reemplazarfalse porBoolean.FALSE para evitarnull ser sin caja aboolean --que no es posible Pero esa no es la pregunta. La pregunta espor qué? ¿Hay alguna referencia en JLS que confirme este comportamiento, especialmente del segundo caso?

Respuestas a la pregunta(4)

Su respuesta a la pregunta