Условный оператор Java?: Тип результата

Я немного озадачен условным оператором. Рассмотрим следующие две строки:

Float f1 = false? 1.0f: null;
Float f2 = false? 1.0f: false? 1.0f: null;

Почему f1 становится нулевым, а второе выражение генерирует исключение NullPointerException?

Langspec-3.0 пункт 15.25 говорит:

В противном случае второй и третий операнды имеют типы S1 и S2 соответственно. Пусть T1 будет типом, который получается в результате применения преобразования в бокс для S1, и пусть T2 будет типом, который получается в результате применения преобразования в бокс в S2. Тип условного выражения является результатом применения преобразования захвата (§5.1.10) к lub (T1, T2) (§15.12.2.7).

Таким образом, дляfalse?1.0f:null T1 - это Float, а T2 - это нулевой тип. Но каков результатlub(T1,T2)? Этот параграф 15.12.2.7 - это слишком много ...

Кстати, я использую 1.6.0_18 на Windows.

PS: я знаю этоFloat f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; не бросает NPE.

Ответы на вопрос(5)

Ваш ответ на вопрос