我找到了一个很好的情况,我完全不了解Java布尔运算符优先级.我知道,并与Oracle的官方文件确认这里是&&和|| 优先于三元运算符?:
现在我在我的代码中有一个类似的奇怪的行
if (a.getItem() != null && a.getItem().getOtherItem() != null?true:a.getItem().getOtherItem().getSomevalue())
{
......
}
Run Code Online (Sandbox Code Playgroud)
我得到的是,a.getItem()上的一个很好的java.lang.NullPointerException.getOtherItem()因为a.getItem()是null.我如何解决它,将其封装在括号之间
if (a.getItem() != null && (a.getItem().getOtherItem() != null?true:a.getItem().getOtherItem().getSomevalue()))
{
......
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么我得到一个NullPointerException如果我遵循以前链接的Oficial文档&&优先于?:和&&是短路评估(在一些问题中也回答).