Java toString方法是如何工作的?

Java toString方法是如何工作的?,java,Java,//我一直在试图理解to字符串是如何工作的,它的主要功能是什么,但我遇到了麻烦。就像下面的例子一样。toString方法到底做什么 public class Item { private String name; private int price; private int qty; public Item() { } public Item(String n, int p, int q){ this.name=n;

//我一直在试图理解to字符串是如何工作的,它的主要功能是什么,但我遇到了麻烦。就像下面的例子一样。toString方法到底做什么

public class Item {

    private String name;
    private int price;
    private int qty;

    public Item() {

    }

    public Item(String n, int p, int q){
        this.name=n;
        this.price=p;
        this.qty=q;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public int getQty() {
        return qty;
    }

    public String toString() {
        return name +": $" + price+":" + qty;
    }

toString
通常是对象的用户友好/可读字符串表示形式。您可以使用它进行调试、记录日志或向最终用户/客户端显示信息


下面是一个简短的讨论,讨论如何以及何时使用toString。

每当java需要类对象的字符串表示时,都会调用toString函数。例如,如果调用
System.out.println(a)如果项目类型为
项目
,则将显示
toString
返回的值。这个方法是
对象的一部分,因此每个java对象都有它的一些默认实现。但在许多情况下,它的信息量不够,最好覆盖它。

API中清楚地记录了它的用途:

返回对象的字符串表示形式。总的来说 toString方法返回一个字符串,该字符串“以文本形式表示”此 对象结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类重写此方法

类对象的toString方法返回一个字符串,该字符串由 对象作为实例的类的名称,at符号 字符“@”和哈希的无符号十六进制表示形式 对象的代码。换句话说,此方法返回一个等于 价值:

如果在类中重写toString,则对默认对象的调用#toString()将被类#toString()替换。在当前代码中,如果尝试打印项实例,则输出的格式将为:

name +": $" + price+":" + qty;

toString
提供了
对象的
字符串
表示形式

public class Person {
    private String firstName;
    private String lastName;

    private Person(String firstName, String lastName) {
         this.firstName = firstName;
         this.lastName = lastName;
    }

    public String getName() {
        return this.firstName + " " + this.lastName;
    }

    public String toString() {
        return this.firstName + " " + this.lastName;
    }
}
想象一下这个类和以下调用:

System.out.println(aPerson.getName());
我们的
toString
方法意味着我们可以简单地执行以下操作:

System.out.println(aPerson);

我想把
toString()
看作是一个方便的函数。无论何时,只要你做以下事情:

MyObject m = ...//
System.err.println(m);

println(m)
实际上正在调用
m.toString()
以获取对象的可读表示。它是每个
对象所固有的,因此您可以始终重写它,让它返回一个最能描述您自己对象的字符串。

在此基础上:应该说
toString
可以用于完全复制对象。例如,
Tile(intx,inty,intz)
会像这样打印:
Tile[x=5][y=1][z=7]
System.out.println(aPerson);
MyObject m = ...//
System.err.println(m);