当我想要打印我的一个对象(显然不是null)时,我遇到了一些奇怪的事情。
如果我使用这一行:
text.append("\n [ITEM ID]: " + (item == null ? (otherItem == null ? 0 : otherItem .getItems().get(i).getId()) : item .getItems().get(i).getId()));
如果我的item
对象为null
,则没有空指针异常。当然这应该是例外结果。但如果我在没有()
标记的情况下使用它:
text.append("\n [ITEM ID]: " + item == null ? (otherItem == null ? 0 : otherItem .getItems().get(i).getId()) : item .getItems().get(i).getId())
我认为条件运算符不执行运算符的其他部分,但是我得到了NullPointerException。
如果有人向我解释,为什么在这种情况下使用()
标记至关重要,我将不胜感激。
答案 0 :(得分:1)
"\n [ITEM ID]: "
和item
之间的连接将优先于等式测试和条件运算符(如果不放括号)(参见Java运算符中的precedences),所以如果你想让它工作,你必须把它们放在一起(因为("\n [ITEM ID]: " + item) == null
可能不是你想要评估的)。
答案 1 :(得分:1)
+
运算符的优先级高于? :
,因此您需要使用括号。见http://bmanolov.free.fr/javaoperators.php