effective java 之始终要覆盖toString
1、为什么要覆盖toString方法?
public class Person {
protected String name;
protected int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}*/
public static void main(String[] args) {
Person s = new Person("Limburger", 12);
System.out.println(s);
}
}
如果不覆盖打印:demo6.Person@1636731
覆盖打印:Person [name=Limburger, age=12]
2、虽然java.lang.Object提供了toString方法的一个实现,但它返回的字符串通常并不是类的用户所期望看到的。
它包含类的名称,以及一个“@”符号,接着是散列码的无符号十六进制表示法,例如“Person@1636731”。
尽管有人认为“Person@1636731”算得上简洁和易于阅读,但是与“Person [name=Limburger, age=12]”比较起来,它还算不上信息丰富的。
toString的约定进一步指出,建议所有的类都覆盖这个方法。
3、在实现toString的时候,必须要做出一个很重要的决定:是否在文档中制定返回值的格式。
对于值类(value class),比电话号码、矩阵类,也建议这么做。
指定格式的好处是,它可以被用作一种标准的、明确的、适合人阅读的对象表示法。
每天努力一点,每天都在进步。