Booleanos, operadores condicionais e caixa automática

Por que isso jogaNullPointerException

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

enquanto isso não

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

?

A solução é a maneira de substituirfalse porBoolean.FALSE evitarnull sendo desembalado paraboolean - o que não é possível. Mas essa não é a questão. A questão éporque? Há alguma referência no JLS que confirme esse comportamento, especialmente no 2º caso?

questionAnswers(4)

yourAnswerToTheQuestion