详解Java的toString()方法:返回该对象的字符串表示

  • Post category:Java

当调用一个对象的 toString() 方法时,它会返回一个字符串,该字符串包含了该对象的某些信息。通常,该字符串用于调试和日志记录目的。Java 默认的 toString() 方法会返回一个对象的 hashCode 的值和对象的类名,如 java.lang.Object@24d46ca6。但是,这种字符串对于调试是没有任何意义的,因此我们需要对 toString() 方法进行自定义。

Java 中,我们可以通过自定义 toString() 方法来得到更有意义的字符串,该方法必须返回一个字符串表示该对象的信息。在下面的代码示例中,我们定义一个 Person 类,它包含了每个人的姓名和年龄属性,并且通过重写 toString() 方法,使其返回一个含有所有属性信息的字符串。

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

在上述代码中,我们在 Person 类中重写了 toString() 方法,并在方法中返回一个字符串,该字符串将 Person 对象的所有属性信息包含在内。

使用该方法,我们可以很容易地输出一个 Person 对象的属性信息:

Person person = new Person("Lucy", 20);
System.out.println(person.toString()); // 输出:Person{name='Lucy', age=20}

除了自定义 toString() 方法外,我们还可以使用其他方法来自定义对象的字符串表示,包括:

  1. 使用 String.format() 方法:
@Override
public String toString() {
    return String.format("Person {name='%s', age=%d}", name, age);
}

在上述代码中,我们使用 String.format() 方法来格式化字符串,使用占位符 %s 表示字符串类型,使用占位符 %d 表示数字类型。

  1. 使用 StringBuilder:
@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("Person {");
    sb.append("name='").append(name).append("'");
    sb.append(", age=").append(age);
    sb.append("}");
    return sb.toString();
}

在上述代码中,我们使用 StringBuilder 来构建字符串,通过多次调用 append() 方法,向其添加不同属性的信息。

无论哪种方式,我们都可以根据需要自定义对象的字符串表示,使其更具可读性和可维护性。