在 println 中调用 println 方法

Calling println method within 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

这是为什么呢? 这个打印的顺序是什么,背后的逻辑是什么?

谢谢!

对 toString 的调用发生在“11”打印之前。

原因(如@Tom所说),为了连接字符串,必须先创建所有片段,然后再连接。

只有在字符串准备就绪后 - 它才会出现在您的屏幕上。

当您调用一个函数时,Java 在实际进入该函数之前计算它的所有参数。所以在你的例子中,它首先评估 "11"+t。现在调用 t.toString(),写入 "new line"。然后toString returns " 4", 就是拼接成"11",然后执行println写"11 4"