我发现了一个与Java布尔运算符优先级有关的不太理解的好情况。我已经查阅了Oracle官方文档这里,证实了&&和||比三元运算符?:具有更高的优先级。
现在我的代码中有一行奇怪的代码,类似于这样:
我得到的是一个漂亮的java.lang.NullPointerException,因为a.getItem()为空,而在a.getItem().getOtherItem()处出现了该异常。我该如何解决它?将其用括号括起来。
所以我的问题是,为什么如果我遵循先前链接的官方文档,并且 && 比 ?: 具有优先级,并且 && 是短路评估的,我会得到 NullPointerException(在某些 问题 中也回答了这个问题)。
现在我的代码中有一行奇怪的代码,类似于这样:
if (a.getItem() != null && a.getItem().getOtherItem() != null?true:a.getItem().getOtherItem().getSomevalue())
{
......
}
我得到的是一个漂亮的java.lang.NullPointerException,因为a.getItem()为空,而在a.getItem().getOtherItem()处出现了该异常。我该如何解决它?将其用括号括起来。
if (a.getItem() != null && (a.getItem().getOtherItem() != null?true:a.getItem().getOtherItem().getSomevalue()))
{
......
}
所以我的问题是,为什么如果我遵循先前链接的官方文档,并且 && 比 ?: 具有优先级,并且 && 是短路评估的,我会得到 NullPointerException(在某些 问题 中也回答了这个问题)。
:
false; - Ker p pagcode
if-elsecode
比 && 运算符更具优先级?在这种情况下,为什么当我将其封装在code
( )code
中时可以正常工作。 - kszosze