Java条件运算符?:的结果类型
- 论坛
- Java条件运算符?:的结果类型
12 浏览
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错误。