作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我刚开始学习 Java。我对构造函数的了解是:
它会在对象初始化时自动运行。
构造函数的名称必须与类名相同。
现在,下面是我开始感到困惑的地方。
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
类型的参数,String
的 valueOf
方法是:
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/
我是一名优秀的程序员,十分优秀!