Java条件运算符?:的结果类型

12 浏览
0 Comments

Java条件运算符?:的结果类型

关于条件运算符,我有一点困惑。考虑下面的两行代码:

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

为什么f1变成了null,而第二个语句抛出了NullPointerException错误?

Langspec-3.0的第15.25段说:

否则,第二个和第三个操作数分别是类型S1和S2。

让T1是将S1应用装箱转换得到的类型,T2是将S2应用装箱转换得到的类型。条件表达式的类型是将lub(T1, T2)(§15.12.2.7)应用捕获转换(§5.1.10)得到的结果。

所以对于false?1.0f:null,T1是Float类型,T2是null类型。但是lub(T1,T2)的结果是什么呢?这个第15.12.2.7段就有点太复杂了...

顺便说一下,我在Windows上使用的是1.6.0_18版本。

PS:我知道Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null;不会抛出NPE错误。

0