Object 的 toString() 方法

定义 Person 类如下:

package learning.example06;

public class Person {
	private String name;
	private int age;
	private String gender;
	
	public Person() {
		
	}
	
	public Person(String name, String gender, int age) {
		this.name = name;
		this.gender = gender;
		this.age = age;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public String getGender() {
		return gender;
	}
	
	public int getAge() {
		return age;
	}
}

在测试类中打印 Person 类实例:

package learning.example06;

public class Demo {
	public static void main(String[] args) {
		Person p = new Person("Aloys", "male", 24);
		System.out.println(p);
	}
}

输出 Person 类的全限定名以及对象的地址,如下:

learning.example06.Person@15db9742

对 println 源码进行追踪,最终可以定位到 Object 类的 toString 方法,如下:

public void println(Object x) {
	String s = String.valueOf(x);
	synchronized (this) {
	    print(s);
	    newLine();
	}
}
public static String valueOf(Object obj) {
	return (obj == null) ? "null" : obj.toString();
}

重写 toString() 方法

实际上,很多时候我们希望在打印类的实例对象时直接输出类的名称以及字段信息等,这时候就需要对 Object 类的 toSting 方法进行重写,同时这也是官方推荐的做法。虽然可以选择手动重写,但如今各 IDE 都支持自动生成重写后的 toString() 方法,更推荐自动生成(也可自动生成 getter/setter,构造器,以及重写后的 equals() 方法等)。
以 Eclipse 为例,鼠标右击代码界面,选择 Source → Generate toString():
Eclipse自动生成 toString
可选择生成方法中所需要包含的内容:
toString

此处仅选择了 Fields,生成结果如下:

@Override
public String toString() {
	return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
}

再次运行测试类,输出如下:

Person [name=Aloys, age=24, gender=male]

更多推荐