【问题标题】:Strange NullPointerException in ternary conditional expression [duplicate]三元条件表达式中的奇怪 NullPointerException [重复]
【发布时间】:2015-02-28 02:52:52
【问题描述】:

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

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

【问题讨论】:

  • 我的对象为空?或者 中的某些对象可能为 null..

标签: java nullpointerexception conditional-statements


【解决方案1】:

这个三元运算符的类型是float。因此,如果myObject.getSomeFloat() 返回空值,则在&lt;some condition&gt; 为真时抛出NullPointerException,并调用myObject.getSomeFloat().floatValue() 以将Float 转换为float

JLS 15.25:

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

在您的情况下,您有一个原始类型 - 浮动 - 以及该浮动的盒装版本 - 浮动。因此,条件表达式的类型是原始类型——float。

【讨论】:

  • @almasshaikh 不,你错了。试试Float x = true ? (Float)null : 0.0f; System.out.println(x); 任意的null 引用是不一样的场景。
  • 哇,这违反直觉。 (+1)
  • 这个答案是正确的——getSomeFloat() 方法必须返回 null,它是自动拆箱的......繁荣。将其他值更改为 Float 会阻止自动拆箱 - 没有繁荣。
猜你喜欢
  • 2018-05-29
  • 2014-12-26
  • 2016-10-31
  • 1970-01-01
  • 2018-09-04
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多