一种“你好,世界!”在屏幕上打印此句子的程序是几乎所有程序员都编写的第一个程序。 您可能已经发生了将Object传递给print或println方法的情况,结果收到了一个奇怪的消息。名字@号码回答。 在此示例中,我们将Object传递给println函数而没有任何附加操作。
public class ActionClass {
public static void main(String[] args) {
Book book = new Book("Odyssey","Homer");
System.out.println(book);
}
private static class Book {
String name;
String author;
public Book(String name, String author) {
this.name = name;
this.author = author;
}
}
}
结果可能如下所示:
Book@5a39699c
通过进一步详细介绍,我们看到原因是由于print函数的实现。 通过将对象传递给打印函数,我们编写的实际命令为:
System.out.println(book);
但是Java看到并运行的是:
System.out.println(book.toString());
嗯 现在我们要看另一种方法。 在后台,toString()方法如下所示:
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
啊哈,这解释了神秘的情况className @ weirdNumber。
有什么建议吗? 当然是。 通过覆盖toString()我们的Object的方法,我们可以轻松地将对象传递给打印方法,而无需将它们转换为字符串。
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
'}';
}
这样做之后,我们在本文中编写的第一个代码将得到如下结果,而无需添加toString()方法。
Book{name='Odyssey', author='Homer'}