2012-12-19 12 views
7

To jest mój kod:println nie drukuje wartość oczekiwaną

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); 

} 

moje wyjście jest:

20 
20 

Ale spodziewam się następująco:

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

mógłby ktoś wytłumaczyć dlaczego otrzymuję "20" jako wynik dla obu połączeń println?

+0

Odpowiedź Sumit Singh wyjaśnia, dlaczego wynik jest taki, jaki jest. Powodem jest pierwszeństwo operatora, patrz [ten dokument] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) – jlordo

+0

@ kodery, które zaakceptowałem – Suranga

Odpowiedz

9

System.out.println("This my first out put "+x==null?y:z); będą realizowane jak

("This my first out put "+x)==null?y:z który nigdy nie będzie mogło być prawdziwe. Więc wyświetli wartość z.

Na przykład:

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

Na powyższym scenariuszu operacja wykonywana lewej do prawej.

Jak powiedziałeś, spodziewasz się następująco:

This my first output 10 

Do tego trzeba niewielkie zmiany w kodzie. Spróbuj tego

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

+1

Ocena wyrażeń w Javie NIE jest zawsze od lewej do prawej. Bierze pod uwagę pierwszeństwo operatora! –

+0

@StephenC wiem, ale mówiłem tylko o tym scenariuszu. Przeciwnie, zwiększy to więcej zamieszania, usunąłem ZAWSZE z mojego oświadczenia. Wierzę, że teraz będzie dobrze. :) – Ravi

4

Spróbuj

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

To rzeczywiście wygeneruje pożądany wynik, ale nie nie odpowiada na pytanie OP: _Czy ktoś może mi wyjaśnić ** dlaczego ** Dostaję "20" jako wynik dla obu wywołań println? _ – jlordo

1

trzeba spróbować:

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)); 
2

użycie Poniższy kod to rozwiąże problem: probelm dlatego jego branie -

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

Jak

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

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)); 

} 
+0

+1, najpierw odpowiadając na prawdziwe pytanie, ** dlaczego ** dane wyjściowe są takie, jakimi są. – jlordo

Powiązane problemy