2017-03-01 24 views
-1

內的println方法,我只是寫了這個代碼:調用的println

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

和:

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

,雖然我希望它打印

11 new line 
4 

它實際上印刷:

new line 
11 4 

這是爲什麼? 這種印刷的順序是什麼?這背後的邏輯是什麼?

謝謝!

+2

你的程序應該如何連接字符串'「11」+ t'在調用' String.valueOf(Object)'for't'(它自己在該對象上調用'toString')?沒錯,在String串聯之前它不能這麼做,因此顯然在將這個串聯的字符串從'main'方法傳遞給'println'之前。 – Tom

+1

因爲在第二次調用'println'之前評估'「11」+ t'。 –

+0

使用調試器並遍歷代碼,您將很快了解執行順序。 – Andreas

回答

2

toString的調用發生在「11」打印之前。

原因(如@Tom所說),爲了拼接字符串,它必須先創建所有的部分,然後再進行拼接。

只有在字符串準備就緒後 - 它纔會進入您的屏幕。

+0

非常感謝!我現在明白了... –

0

當您調用一個函數時,Java在實際進入該函數之前評估其所有參數。所以在你的情況下,它首先評估"11"+t。現在調用t.toString(),它寫入「新行」。然後toString返回「4」,並連接到「11」,然後println被執行寫入「11 4」