println does not print the expected value
Asked Answered
F

3

7

This is my code:

public static void main(String[] arg)
{

    String x = null;
    String y = "10";
    String z = "20";

    System.out.println("This my first out put "+x==null?y:z);

    x = "15";

    System.out.println("This my second out put "+x==null?y:z);

}

My output is:

20
20

But I'm expecting this:

This my first out put 10
This my second out put 20

Could someone explain me why I'm getting "20" as output for both println calls?

Funest answered 19/12, 2012 at 7:23 Comment(1)
Sumit Singh's answer explains why the output is like it is. The reason is operator precedence, see this documentSugarcoat
J
9

System.out.println("This my first out put "+x==null?y:z); will be executed like

("This my first out put "+x)==null?y:z which is never going to be true. So, it will display z value.

For example:

int x=10;
int y=20;
System.out.println(" "+x+y); //display 1020
System.out.println(x+y+" "); //display 30

For above scenario, operation performed left to right.

As, you said, you are expecting this:

This my first output 10

For this, you need little change in your code. Try this

System.out.println("This my first output " + ((x == null) ? y : z));

Jemine answered 19/12, 2012 at 7:25 Comment(2)
evaluation of expressions in Java is NOT always left to right. It takes account of operator precedence!Zouave
@StephenC i know, but i was talking for this scenario only. Rather, it will increase more confusion, i removed ALWAYS from my statement. I believe, now it will be OK. :)Jemine
T
4

Try

System.out.println("This my first out put "+ (x==null?y:z));
Tentacle answered 19/12, 2012 at 7:25 Comment(1)
This will indeed generate the desired output, but does not answer OPs question: Could someone explain me why I'm getting "20" as output for both println calls?Sugarcoat
R
1

you need to try:

System.out.println("This my first out put "+(x==null?y:z));
x = "15";
System.out.println("This my second out put "+(x==null?y:z));
Rattlebrain answered 19/12, 2012 at 7:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.