三元条件表达式中的奇怪NullPointerException

时间:2015-01-01 12:42:10

标签: java nullpointerexception conditional-statements

有谁能告诉我为什么Java会在这里抛出NullPointerException

Float x = <some condition> ? myObject.getSomeFloat() : 0.0f;
  • 方法getSomeFloat返回Float
  • 0.0f更改为new Float(0)可以正常使用。

1 个答案:

答案 0 :(得分:5)

此三元运算符的类型为float。因此,如果myObject.getSomeFloat()返回null,则NullPointerException为真时会抛出<some condition>并调用myObject.getSomeFloat().floatValue()以将Float转换为float }。

JLS 15.25

  

如果第二个和第三个操作数之一是原始类型T,而另一个操作数的类型是将装箱转换(第5.1.7节)应用于T的结果,则条件表达式的类型为T. / p>

在你的情况下,你有一个原始类型 - 浮点数 - 和浮点数的盒装版本 - 浮点数。因此,条件表达式的类型是基本类型 - float。