重写 tostring 方法是提升 java 自定义对象可读性的最直接方式——它让对象在打印、日志或调试时输出有意义的信息而非内存地址;需遵循只含关键字段、保持可读、避免副作用等原则,并推荐使用 lombok @tostring 简化维护。

重写 toString 方法是提升 Java 自定义对象可读性的最直接方式——它让对象在打印、日志或调试时不再显示无意义的内存地址,而是输出真正有意义的信息。
为什么默认 toString 不够用
Java 中所有类都继承自 Object,其默认 toString() 返回形如 ClassName@hashCode 的字符串(例如 Person@1b6d3586)。这个结果对开发者毫无业务含义,无法快速识别对象状态。
如何正确重写 toString 方法
核心原则是:只包含关键字段、保持可读性、避免副作用、不抛异常。
- 使用
@Override显式标注,防止拼写错误或签名不匹配 - 字段选择应聚焦“一眼看懂对象身份和状态”,比如 ID、姓名、状态等,而非全部字段
- 格式建议统一,常用括号包裹、逗号分隔,例如
Person{id=123, name='张三', active=true} - 注意 null 安全:对可能为 null 的引用字段做判空处理,避免
NullPointerException - 不要在
toString中调用耗时操作(如数据库查询、文件读取)或修改对象状态
推荐实现方式(手写 vs 工具生成)
手写适合字段少、逻辑清晰的类;IDE 自动生成(如 IntelliJ 的 Generate → toString)能快速覆盖多数场景,但需人工检查字段是否合理。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
示例(手写):
public class User {
private Long id;
private String username;
private String email;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + (email != null ? email : "null") + '\'' +
'}';
}
}
进阶建议:配合 Lombok 简化维护
对于字段频繁变动的类,可引入 Lombok 库,用 @ToString 注解自动完成。它支持排除字段(exclude)、调用 getter(callSuper)、延迟计算(doNotUseGetters)等选项。
示例:
@Data
@ToString(exclude = "password")
public class User {
private Long id;
private String username;
private String password; // 敏感字段不参与 toString
private String email;
}
编译后自动生成的 toString 会自动忽略 password 字段,既安全又简洁。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










