0

私は(明らかにnullではない)私のオブジェクトの1つを印刷するとき、私はいくつかの奇妙なことに実行してきました。私itemオブジェクトがnullある場合条件演算子()

text.append("\n [ITEM ID]: " + (item == null ? (otherItem == null ? 0 : otherItem .getItems().get(i).getId()) : item .getItems().get(i).getId())); 

ヌルポインタ例外はありません。私はこの行を使用する場合は

。もちろん、これは例外的な結果でなければなりません。私は()マークなしでそれを使用する場合でも:

text.append("\n [ITEM ID]: " + item == null ? (otherItem == null ? 0 : otherItem .getItems().get(i).getId()) : item .getItems().get(i).getId()) 

私は条件演算子がオペレータの他の部分を実行していないと思ったが、私はNullPointerExceptionが得ました。

このケースで()マークを使用することが不可欠である理由私は、誰かが私にそれを説明する場合いただければ幸いです。あなたはそれが仕事をしたい場合は、それらを配置する必要がありますので

+1

演算子の優先順位の場合を参照してください? –

+3

ヒント: ' "\ nは[ITEM ID]:" + item'になり...? –

答えて

1

"\n [ITEM ID]: "item間の連結は、平等のテストとあなたは括弧(Javaの演算子でprecedencesを参照)を入れていない場合は、条件演算子に優先順位を持つことになります(("\n [ITEM ID]: " + item) == nullはおそらくあなたが評価したいものではありません)。

+0

ありがとうございます。 2つの完璧な答え、私は1つ受け入れない。しかし、私は最初のものを受け入れなければならないと思うが、タルニコラに非常に感謝する!それは私がかっこを必要とするもの... – czupe

+0

@czupeまあ実際には最初に答えましたが、とにかく歓迎します;) – talnicolas

+0

ok。あなたが最初だった、とあなたは+演算子対==を書いたことを評価した場合、私はあなたが私のacceptenceを稼ぐと思います。再度、感謝します。素敵な一日...あなたの答えのための – czupe

1

+演算子の優先度は? :よりも高いため、かっこを使用する必要があります。 http://bmanolov.free.fr/javaoperators.php

+0

本当、感謝を持っています! – czupe

+0

この場合、 '=='よりも高い優先順位です。 –

+0

ええ、もっと貴重なことに、連結演算子は==より高い優先順位を持っています(そして、条件演算子は無関係です)、私はそれを理解しています.... – czupe