Java 中 toString() 方法的作用,以及如何重写 toString() 方法

2018-11-08
学习笔记

toString() 方法介绍


toString()是Object类中的一个方法,而java中的所有类都继承自Object类,因此每个类中都有toString()方法,以下是toString()方法的源码:

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

可以看出,java的原生toString()方法返回的是类名 + "@" + 类对象的哈希code码

为什么要重写 toString() 方法?


当我们想要让一个对象被输出到显示器的时候,往往调用一个对象的toString()方法,将对象的内容转换为字符串,而类名 + "@" + 类对象的哈希code码不能很好的代表每一个对象,所以我们要重写toString()方法。

以下情况也会自动调用toString()方法:
System.out.println( 对象名 );

重写 toString() 方法的规范


  1. 必须被声明为public
  2. 返回类型为String
  3. 方法的名称必须为toString,且无参数
  4. 方法体中不要使用输出方法System.out.println()

重写toString()实例


假设有一个User类,类中有三个String私有属性: id , name , gender ,三个属性都有setter和getter方法。

public class User {
private String id;
private String name;
private String gender;
public User()
{
//无参构造函数
}
public User(String inId,String inName,String inGender)
{
//有参构造函数
this.id = inId;
this.name = inName;
this.gender = inGender;
}
//getter and setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}


public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}


public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
//end getter and setter
}

在TestUser类中对这个类进行调用测试User继承自Object类的原生toString()方法:

import java.util.*;
public class TestUser {
public static void main(String [] args)
{
//创建User类的简单实例
User userOne = new User("1","One","Boy");
User userTwo = new User("2","Two","Girl");
User userThree = new User("3","Three","Boy");
//使用System.out.println( 对象名.toString() )手动调用
System.out.println( userOne.toString() );
System.out.println( userTwo.toString() );
//直接使用System.out.println( 对象名 )自动调用
System.out.println( userThree );
}

}

运行结果为:

lesson08.User@610455d6
lesson08.User@511d50c0
lesson08.User@60e53b93

重写User类的toString()方法后:

public class User {
private String id;
private String name;
private String gender;
public User()
{
//无参构造函数
}
public User(String inId,String inName,String inGender)
{
//有参构造函数
this.id = inId;
this.name = inName;
this.gender = inGender;
}
public String toString()
{
return ( this.getClass().getName()+",ID:"+getId()+",Name:"+getName()+",Gender:"+getGender() );
}
/*以下重复代码省略
getter and setter
...
...
...
end getter and setter*/

}

再次执行TestUser类运行结果为:

lesson08.User,ID:1,Name:One,Gender:Boy
lesson08.User,ID:2,Name:Two,Gender:Girl
lesson08.User,ID:3,Name:Three,Gender:Boy

可以看到重写toString()方法已经生效,以上便是有关toString()方法的全部记录。