gpt4 book ai didi

java - 如何在 println() 中自动调用 toString()

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:42 28 4
gpt4 key购买 nike

我刚开始学习 Java。我对构造函数的了解是:

  1. 它会在对象初始化时自动运行。

  2. 构造函数的名称必须与类名相同。

现在,下面是我开始感到困惑的地方。

class Frog{

public String toString() {
return "Hello";
}
}

public class App {

public static void main(String[] args) {
Frog frog1 = new Frog();
System.out.println(frog1);
}
}

我的问题:既然public String toString ()不是构造函数,那为什么我运行程序的时候它可以表现得像构造函数。我以为它只能在我从 App 类调用它时运行。

最佳答案

简答:公共(public)frog1.toString() 方法调用用于内部 System.out.println(Object x) 调用堆栈。

但是怎么办?让我们一起找出答案:)

看一下PrintStream 类(该实例默认用作System.out 字段值)源代码及其println接受 Object 参数的实现:

public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}

对于 Object 类型的参数,StringvalueOf 方法是:

public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}

obj 在你的例子中是 frog1,它的 toString() 方法被调用并返回 "Hello"控制台输出的字符串实例)

关于java - 如何在 println() 中自动调用 toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128516/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com