Логические, условные операторы и автобоксинг

Почему это вызывает NullPointerException

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

, а это не

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

?

Решение состоит в том, чтобы заменить false на Boolean .FALSE , чтобы избежать распаковки null в логического - что невозможно. Но вопрос не в этом. Возникает вопрос почему ? Есть ли в JLS ссылки, подтверждающие это поведение, особенно во втором случае?

128
задан BalusC 3 June 2012 в 21:00
поделиться