2017-03-01 78 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”