2017-03-01 5 views
-1

Ich schrieb diesen Code:Aufruf println Methode innerhalb println

public class T 
{ 
    public String toString() 
    { 
    System.out.println("new line"); 
    return " "+4; 
    } 
} 

und:

public static void main(String[] args) 
{ 
    T t = new T(); 
    System.out.println("11"+t); 
} 

und während ich es

11 new line 
4 

es tatsächlich gedruckt drucken erwartet:

new line 
11 4 

warum ist das? Was ist die Reihenfolge dieses Drucks und was ist die Logik dahinter?

Danke!

+2

zu schreiben. Wie sollte Ihr Programm die Strings hier "11" + t vor dem Aufruf von 'verketten können String.valueOf (Object) 'für' t' (welches selbst 'toString' für dieses Objekt aufruft)? Richtig, kann es nicht, also muss es das vor der String-Verkettung tun und daher offensichtlich vor dem Verketten dieses verketteten Strings zu 'println' von der' main'-Methode. – Tom

+1

Weil "11" + t "ausgewertet wird, bevor" println "das zweite Mal aufgerufen wird. –

+0

Verwenden Sie einen Debugger und Schritt durch Ihren Code, und Sie werden schnell die Reihenfolge der Ausführung lernen. – Andreas

Antwort

2

Der Aufruf für die toString geschieht vor dem "11" Drucken.

Der Grund (wie @Tom sagte), um die Zeichenfolge zu contrating, Es muss alle Stücke zuerst erstellen, und dann es concating.

Erst nachdem der String voll ist, geht es auf Ihren Bildschirm.

+0

Vielen Dank! Ich hab es jetzt... –

0

Wenn Sie eine Funktion aufrufen, wertet Java alle Argumente aus, bevor diese Funktion ausgeführt wird. In diesem Fall wertet es zuerst "11"+t aus. Jetzt ruft t.toString() auf, was "neue Zeile" schreibt. Dann gibt toString "4" zurück, und das wird zu "11" verkettet, dann wird println ausgeführt, um "11 4"