在 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"
我刚刚写了这段代码:
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"