当调用一个对象的 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()
方法外,我们还可以使用其他方法来自定义对象的字符串表示,包括:
- 使用 String.format() 方法:
@Override
public String toString() {
return String.format("Person {name='%s', age=%d}", name, age);
}
在上述代码中,我们使用 String.format()
方法来格式化字符串,使用占位符 %s
表示字符串类型,使用占位符 %d
表示数字类型。
- 使用 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()
方法,向其添加不同属性的信息。
无论哪种方式,我们都可以根据需要自定义对象的字符串表示,使其更具可读性和可维护性。