0

当我想打印一个对象(显然不为空)时,我遇到了一些奇怪的事情。有和没有条件运算符()

如果我用这条线:

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。

如果有人向我解释,我将不胜感激,为什么在这种情况下使用()标记至关重要。

+1

运算符优先级的一个例子? – 2012-02-17 15:49:31

+3

提示:'“\ n [ITEM ID]:”+ item'成为...? – 2012-02-17 15:50:00

回答

1

"\n [ITEM ID]: "item之间的级联将有优先权放在平等的测试,如果你不把括号(见的Java运营商precedences)条件运算符,所以你必须把他们,如果你想要的工作(因为("\n [ITEM ID]: " + item) == null可能不是你想要评估的)。

+0

谢谢。两个完美的答案,我不知道哪一个接受。但我想我应该接受第一个,但非常感谢你talnicolas!多数民众赞成在什么我需要括号... – czupe 2012-02-17 15:59:19

+0

@czupe嗯,我实际上回答第一,但不管怎么样,你不受欢迎;) – talnicolas 2012-02-17 16:02:53

+0

好的。如果你是第一个,并评估你写了== vs +操作符,我认为你赢得了我的认可。再次感谢。祝你有个美好的一天... – czupe 2012-02-17 16:04:38

1

+运算符的优先级高于? :,所以您确实需要使用括号。请参见http://bmanolov.free.fr/javaoperators.php

+0

真实,谢谢你的回答! – czupe 2012-02-17 15:57:54

+0

在这种情况下,比'=='更高的优先级。 – 2012-02-17 15:59:47

+0

yeah更珍贵的是,连接运算符的优先级高于==(并且条件运算符是不相关的),我明白它.... – czupe 2012-02-17 16:03:06