重写 tostring 方法的核心是让对象打印时清晰展示关键属性。默认 object.tostring() 返回类名@哈希码,无调试价值;重写后可输出如 user{name='张三', age=25, email='zhang@example.com'};推荐用 string.format 或 stringbuilder,注意 null 安全、敏感字段过滤及工具辅助生成。

重写 toString 方法的核心是让对象打印时能清晰、简洁地展示关键属性,而不是默认的类名@哈希码形式。
为什么需要重写 toString
默认的 Object.toString() 返回类似 com.example.User@1b6d3586 的字符串,对调试和日志毫无帮助。重写后,打印对象或日志输出时能直接看到有意义的字段值,比如 User{name='张三', age=25, email='zhang@example.com'}。
基本重写方式(推荐使用 StringBuilder 或 String.format)
避免字符串拼接性能问题,也便于维护。以一个 User 类为例:
public class User {
private String name;
private int age;
private String email;
@Override
public String toString() {
return String.format("User{name='%s', age=%d, email='%s'}",
name, age, email);
}
}
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 用
String.format可读性好,适合字段不多、类型明确的场景 - 若字段可能为
null,建议先做非空判断或用Objects.toString(obj, "null")防止 NPE - 字段较多时,可用
StringBuilder提升性能,逻辑更可控
处理 null 值与复杂字段
真实业务中字段常为 null 或包含嵌套对象。安全写法示例:
import java.util.Objects;
@Override
public String toString() {
return String.format("User{name=%s, age=%d, email=%s}",
Objects.toString(name, "null"),
age,
Objects.toString(email, "null"));
}
-
Objects.toString(obj, "null")自动处理null,避免抛出异常 - 对集合、数组或自定义对象字段,可调用其
toString()(前提是它也被合理重写),或只输出简要信息如大小:addresses.size() + " addresses" - 敏感字段(如密码)不应出现在
toString中,避免日志泄露
借助 IDE 或 Lombok 简化生成
手动编写易出错且重复。现代开发常用工具辅助:
- IntelliJ IDEA:右键 → Generate → toString(),勾选需要包含的字段,支持多种模板(如括号格式、JSON 风格)
- Lombok:添加
@ToString注解,自动注入toString实现;可配置exclude排除敏感字段,或includeFieldNames = true显示字段名 - 注意:Lombok 生成的
toString默认跳过null字段(除非显式设置doNotUseGetters = true),需确认是否符合预期
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










