java中tostring()是object类的默认方法,不依赖第三方库;但可用apache commons lang(tostringbuilder)、lombok(@tostring)或jackson(objectmapper)更简洁安全地实现,各适用于调试、格式控制或json输出等不同场景。

Java 中 toString() 方法本身是 Object 类的默认方法,不依赖第三方库;但你可以借助第三方库(如 Apache Commons Lang、Lombok、Jackson 等)更简洁、安全、结构化地实现或生成 toString() 输出,而不是手动拼接字符串。
用 Apache Commons Lang 自动生成 toString
Apache Commons Lang 提供了 ToStringBuilder,支持多种风格(如简洁、多行、JSON 风格),避免空指针和格式混乱。
- 添加 Maven 依赖:
org.apache.commons
commons-lang3
3.14.0 - 在类中重写
toString():
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
.append("id", id)
.append("name", name)
.append("email", email)
.toString();
}
输出示例:Person[id=1,name=Tom,email=tom@example.com]。支持 ToStringStyle.JSON_STYLE 输出类似 JSON 的格式。
用 Lombok 注解一键生成 toString
Lombok 在编译期自动生成 toString(),无需手写,且可配置排除字段、启用/禁用 null 安全等。
- Maven 依赖:
org.projectlombok
lombok
true - 直接加注解:
@Data // 自动包含 @ToString
public class User {
private Long id;
private String name;
private String email;
}
也可单独使用 @ToString(exclude = "password") 排除敏感字段,或用 of 指定只包含某些字段。
用 Jackson 序列化为 JSON 字符串(适合调试/日志)
若希望 toString() 返回结构清晰、可读性强的 JSON 格式(尤其适合嵌套对象或集合),可用 Jackson 的 ObjectMapper。
- 注意:不建议在生产环境高频调用(序列化有开销),但调试时很实用;需确保
ObjectMapper是单例复用。 - 示例:
private static final ObjectMapper mapper = new ObjectMapper();
@Override
public String toString() {
try {
return mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
return super.toString(); // 回退到默认
}
}
输出如:{"id":1,"name":"Tom","email":"tom@example.com"}。支持缩进、日期格式、忽略 null 字段等配置。
注意事项与选择建议
不同场景适用不同方案:
- 日常开发、快速调试 → 优先选 Lombok,省事、类型安全、IDE 友好
- 需要灵活控制格式(如对齐、换行、字段顺序)→ 用 Commons Lang 的
ToStringBuilder - 已有 Jackson 依赖且希望日志/调试输出结构化 JSON → 可临时用 Jackson,但避免在高频 toString 调用中使用
- 不要在
toString()中做耗时操作(如 I/O、远程调用)、不要抛出受检异常、避免泄露敏感信息
不复杂但容易忽略细节:无论用哪种方式,保持一致性、兼顾可读性与安全性才是关键。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











