Условный оператор с и без () - PullRequest
0 голосов
/ 17 февраля 2012

Я столкнулся с какой-то странной вещью, когда хочу напечатать один из своих объектов (который, очевидно, не равен нулю).

Если я использую эту строку:

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.

Я быБуду признателен, если кто-нибудь объяснит мне, почему в этом случае важно использовать знаки ().

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Оператор + имеет более высокий приоритет, чем ? :, поэтому вам необходимо использовать круглые скобки.Смотри http://bmanolov.free.fr/javaoperators.php

1 голос
/ 17 февраля 2012

Объединение между "\n [ITEM ID]: " и item будет иметь приоритет в тесте на равенство и условном операторе, если вы не поставите круглые скобки (см. предшествования в операторах Java), поэтому поставить их, если вы хотите, чтобы это работало (поскольку ("\n [ITEM ID]: " + item) == null, вероятно, не то, что вы хотите оценить).

...