Java中重写toString方法的核心是清晰输出关键状态,推荐用Objects.toString()处理null、避免循环引用和耗时操作,IDE可一键生成。

Java 中编写 toString 方法,核心是让对象能清晰、可读地输出自身关键状态,而不是默认的类名+哈希码(如 Person@1b6d3586)。推荐优先使用 Objects.toString() 或 String.format(),避免手动拼接 null 引发异常。
重写 toString 的基本写法
在类中用 @Override 注解明确覆盖父类方法,返回一个格式统一、字段完整、不含敏感信息的字符串:
- 只包含业务相关字段,不打印大对象、集合内容(除非必要且已简化)
- 对可能为
null的引用类型字段做安全处理(如用Objects.toString(name, "null")) - 字段顺序建议与构造参数或属性声明顺序一致,便于阅读和调试
推荐写法:用 Objects.toString 简化 null 处理
这是最常用也最稳妥的方式,尤其适合字段较多或存在潜在 null 的场景:
public class Person {
private String name;
private Integer age;
private String email;
@Override
public String toString() {
return "Person{" +
"name=" + Objects.toString(name, "null") +
", age=" + Objects.toString(age, "null") +
", email=" + Objects.toString(email, "null") +
'}';
}
}
如果某个字段为 null,Objects.toString(obj, "null") 会输出 "null" 字符串,不会抛出 NullPointerException。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
更简洁方案:用 String.format 或 IDE 自动生成
对字段确定非 null 的简单类,可用 String.format 提升可读性:
@Override
public String toString() {
return String.format("Person{name='%s', age=%d, email='%s'}",
name, age, email);
}
现代 IDE(如 IntelliJ IDEA)支持一键生成 toString:右键 → Generate → toString(),它会自动用 Objects.toString 包裹所有字段,并支持勾选/排除特定字段。
进阶注意:避免循环引用和性能陷阱
若对象间存在双向引用(如 Order 持有 User,User 又持有 List<Order>),直接在 toString 中调用对方 toString() 会导致栈溢出。此时应:
- 只打印对方 ID 或简单标识(如
user.id),不调用其toString() - 对集合字段,改用
collection.size()或collection.stream().map(...).toList()限制长度 - 避免在
toString中执行耗时操作(如数据库查询、文件读取)


















