2012-12-19 11 views
7

Questo è il mio codice:println non stampa il valore atteso

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

} 

La mia uscita è:

20 
20 

Ma mi aspetto questo:

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

Qualcuno potrebbe spiegare perché sto ricevendo "20" come output per entrambe le chiamate println?

+0

La risposta di Sumit Singh spiega perché l'output è come è. Il motivo è la precedenza degli operatori, vedere [questo documento] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) – jlordo

+0

@coders Ho accettato – Suranga

risposta

9

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

("This my first out put "+x)==null?y:z che non è mai sta per essere vero. Quindi, visualizzerà il valore z.

Ad esempio:

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

Per scenario di cui sopra, operazione eseguita sinistra a destra.

Come, hai detto, vi aspettate questo:

This my first output 10 

Per questo, è necessario piccolo cambiamento nel codice. Prova questo

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

+1

la valutazione delle espressioni in Java NON è sempre da sinistra a destra. Tiene conto della precedenza degli operatori! –

+0

@StephenC lo so, ma stavo parlando solo per questo scenario. Piuttosto, aumenterà di più la confusione, ho rimosso SEMPRE dalla mia dichiarazione. Credo, ora andrà bene. :) – Ravi

4

Prova

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

Questo genererà effettivamente l'output desiderato, ma fa non rispondere alla domanda degli OP: _ Qualcuno potrebbe spiegarmi ** perché ** ricevo "20" come output per entrambe le chiamate println? _ – jlordo

1

è necessario provare:

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

utilizzare il codice seguendo questo risolverà il problema: Il problema soltanto perché la sua assunzione -

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

Come

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, prima per rispondere alla domanda reale, ** perché ** l'output è come è. – jlordo

Problemi correlati