重写 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项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 用
java.util.Objects.toString(Object, String)安全处理 null 字段,例如Objects.toString(name, "null") - 用
String.format()或文本块(Java 15+)组织多字段格式,保持结构清晰 - 字段顺序建议按业务重要性或声明顺序排列,方便比对
- 避免在
toString中调用可能抛异常、耗时或有副作用的方法(如数据库查询、远程调用)
实用示例(含 null 安全)
假设有一个 User 类:
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 的模块中
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










