重写 toString() 方法能让对象打印时显示关键属性而非默认哈希码。标准写法为“类名(属性=值, …)”,需显式输出 null、过滤敏感字段、避免异常或耗时操作;推荐用 IDE 自动生成或 Lombok 的 @ToString 注解简化。

重写 toString() 方法是 Java 中最常用、最实用的调试技巧之一,它能让你在打印对象时直接看到关键属性值,而不是默认的类名+哈希码(如 Person@1b6d3586)。
为什么需要重写 toString()
Java 中所有类都继承自 Object,其默认 toString() 返回的是 getClass().getName() + "@" + Integer.toHexString(hashCode())。这对调试毫无帮助。重写后,System.out.println(person) 或日志输出就能直观展示对象状态。
手动重写 toString 的标准写法
推荐使用简洁、可读性强、符合惯例的格式:类名 + 属性键值对(括号包裹),例如 Person(name=张三, age=28, email=null)。注意以下要点:
- 始终以类名开头,用括号包裹属性,增强可读性和结构感
- 属性按逻辑顺序排列(如主键优先、必填字段靠前)
- 显式写出
null,避免歧义(不建议省略或替换成空字符串) - 敏感字段(如密码)应过滤或脱敏,不直接打印
- 避免在
toString()中调用可能抛异常或耗时的方法(如数据库查询、IO)
用 IDE 自动生成(推荐初学者)
IntelliJ IDEA 和 Eclipse 都支持一键生成 toString():
立即学习“Java免费学习笔记(深入)”;
- IntelliJ:右键 → Generate… → 选择 toString() → 勾选需包含的字段 → 点击 OK
- Eclipse:右键 → Source → Generate toString() → 选择模板(推荐
StringBuilder方式) - 生成后建议检查并微调:比如排除集合的全量内容(改用
list.size())、替换特殊字符、添加注释说明
进阶技巧:用 Lombok 简化(适合中大型项目)
如果项目已引入 Lombok,只需在类上加一个注解,编译时自动注入 toString():
<font color="#888"><code>@Data // 包含 @ToString、@Getter、@Setter 等</code></font>
或单独使用:
<font color="#888"><code>@ToString(exclude = {"password", "certData"})</code></font>
还可自定义输出格式:
<font color="#888"><code>@ToString(of = {"id", "username"}, includeFieldNames = true)</code></font>
注意:Lombok 生成的默认行为已兼顾 null 安全与可读性,但上线前仍建议验证输出是否符合团队日志规范。



















