重写 toString 方法是让对象在打印、日志或调试时输出可读信息的关键方式;默认 Object.toString() 仅返回类名加哈希码,不利于调试;应使用 Objects.toString() 处理 null、避免副作用,并推荐 Lombok @ToString 或 IDE 自动生成。

重写 toString 方法是让对象在打印、日志或调试时输出可读信息的关键方式。默认的 Object.toString() 只返回类名加哈希码(如 com.example.User@1b6d3586),对调试帮助很小。
为什么需要重写 toString
便于快速查看对象当前状态,尤其在单元测试、日志输出、IDE 调试窗口或 System.out.println(user) 时直观显示字段值。不重写就只能靠打断点或手动拼接字符串,效率低且易出错。
如何正确重写 toString
推荐使用 Objects.toString() 或现代工具类辅助,避免空指针和格式混乱:
- 用
java.util.Objects.toString(Object, String)安全处理 null 字段,例如Objects.toString(name, "null") - 用
String.format()或文本块(Java 15+)组织多字段格式,保持结构清晰 - 字段顺序建议按业务重要性或声明顺序排列,方便比对
- 避免在
toString中调用可能抛异常、耗时或有副作用的方法(如数据库查询、远程调用)
实用示例(含 null 安全)
假设有一个 User 类:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
public class User {
private String name;
private Integer age;
private String email;
@Override
public String toString() {
return String.format("User{name=%s, age=%s, email=%s}",
Objects.toString(name, "null"),
Objects.toString(age, "null"),
Objects.toString(email, "null"));
}
}
当 new User().toString() 执行时,输出类似:User{name=null, age=null, email=null},不会崩溃,也一目了然。
更省心的方案:用 Lombok 或 IDE 自动生成
开发中常用以下方式减少模板代码:
- Lombok 添加
@ToString注解,自动包含所有非静态字段;加includeFieldNames = true和callSuper = false控制细节 - IntelliJ IDEA:右键 →
Generate → toString(),支持多种模板(如 Google Guava、Apache Commons Lang 风格) - 确保生成的代码仍做 null 判断,尤其在未启用 Lombok 的模块中

















