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