czupe
czupe

Reputation: 4919

Conditional Operator with and without ()

I have run in to some weird thing when I want to print one of my objects (which is obviously not null).

If I use this line:

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

There is no null pointer exception if my item object is null. Of course this should be the excepted result. But if I use it without the () marks:

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

I thought the conditional operator does not execute the other part of the operator, but I got a NullPointerException.

I would appreciate if someone explain it to me, why it is essential to use the () marks in this case.

Upvotes: 0

Views: 159

Answers (2)

talnicolas
talnicolas

Reputation: 14053

The concatenation between "\n [ITEM ID]: " and item will have priority on the equality test and the conditional operator if you don't put the parenthesis (see the precedences in Java operators), so you have to put them if you want it to work (as ("\n [ITEM ID]: " + item) == null is probably not what you want to evaluate).

Upvotes: 1

Diego
Diego

Reputation: 18359

The + operator has higher precedence than ? :, so you do need to use parenthesis. See http://bmanolov.free.fr/javaoperators.php

Upvotes: 1

Related Questions