String concatenation does not work properly in Java when concatenating 2 results of ternary operators

StackOverflow https://stackoverflow.com/questions/22117029

  •  18-10-2022
  •  | 
  •  

Question

Dear Java guru 's!

Can you, please, explain me, why String concatenation does not work properly in Java when concatenating 2 results of ternary operators?

Example:

String str = null;
String x = str != null ? "A" : "B" + str == null ? "C" : "D";
System.out.println(x);

Output is "D", but I expected "BC".

I am suspecting that it works like so because of operators priorities, but I am not sure, about how we exactly we get "D" for case above. What calculation algorithm takes place for this case?

Was it helpful?

Solution

It's interpreted as following code:

String x = str != null ? "A" : ("B" + str == null ? "C" : "D");

"B" + str is not null so it will be evaluated as "D"

With help of OSborn's answer you can do what you expect with this code:

String x = (str != null ? "A" : "B") + (str == null ? "C" : "D");

and since you are just comparing str with null and both conditional statements are almost the same, it can be shortened like this:

 String x = (str != null ? "AD" : "BC");

OTHER TIPS

The problem is probably the order of operations. You can make it explicit by writing:

String x = (str != null ? "A" : "B") + (str == null ? "C" : "D");

"B" + str == null ? "C", String concatenation evaliated first before the conditional expression evaluated

I think you intended

String x = (str != null ? "A" : "B") + (str == null ? "C" : "D");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top