toString方法的作用与默认行为
在Java中,所有类都直接或间接继承自Object类,而Object类中定义了toString方法,该方法的默认实现是返回对象的类名加上@符号再加上对象的哈希码十六进制表示。当我们直接打印自定义对象,或者将对象与字符串拼接时,默认会调用这个toString方法,得到的输出无法直观反映对象内部存储的属性信息。

比如我们定义一个简单的User类,只包含id和name两个属性,不重写toString方法时,打印User对象的输出类似User@1b6d3586,完全看不出对象的具体属性值。
重写toString方法的基本步骤
重写toString方法的核心逻辑是返回包含对象所有关键属性的字符串,通常遵循以下规范:
- 方法访问修饰符为public
- 返回类型为String
- 方法没有参数
- 返回的字符串要清晰展示对象的核心属性,建议包含类名和属性名与对应值
基础示例:重写User类的toString方法
以下是User类重写toString方法的完整实现:
public class User {
private Integer id;
private String name;
// 构造方法
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
// getter和setter方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 重写toString方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + ''' +
'}';
}
}
此时创建User对象并打印,输出结果为User{id=1, name='张三'},可以清晰看到对象的属性内容。
不同场景下的toString方法重写
包含集合属性的对象重写
如果对象中包含集合类型的属性,重写toString方法时直接拼接集合即可,集合本身也有默认的toString实现,会展示集合内的元素内容:
import java.util.List;
public class Student {
private Integer studentId;
private String studentName;
private List<String> courseList;
public Student(Integer studentId, String studentName, List<String> courseList) {
this.studentId = studentId;
this.studentName = studentName;
this.courseList = courseList;
}
// getter和setter省略
@Override
public String toString() {
return "Student{" +
"studentId=" + studentId +
", studentName='" + studentName + ''' +
", courseList=" + courseList +
'}';
}
}
使用IDE自动生成toString方法
实际开发中不需要手动拼接字符串,主流的Java IDE都支持自动生成toString方法。例如在IntelliJ IDEA中,右键选择Generate,然后选择toString选项,勾选需要包含在输出中的属性,即可自动生成符合规范的toString方法实现,避免手动拼接出错。
重写toString方法的注意事项
- 不要返回null,否则打印对象时会抛出NullPointerException
- 如果对象存在循环引用,比如A对象包含B对象,B对象又包含A对象,重写toString方法时要注意避免无限递归调用,可选择性只展示部分属性
- 如果属性中包含敏感信息,比如密码、身份证号等,重写toString方法时不要将这些信息拼接进返回字符串,避免敏感信息泄露
- 重写时要添加@Override注解,这样既可以让编译器检查是否正确重写了父类方法,也能让代码可读性更强
总结
重写toString方法是Java开发中提升调试效率的基础操作,通过自定义返回内容,可以让对象打印结果更直观。只要遵循规范,根据对象属性特点合理拼接返回字符串,就能满足大部分场景下的使用需求。同时配合IDE的自动生成功能,可以快速完成该方法的实现,减少不必要的工作量。
JavatoString方法对象打印方法重写修改时间:2026-06-23 00:51:13