java中tostring方法默认输出类名@哈希值,不直观且无法反映对象状态;需重写tostring,可用字符串拼接、string.format、objects.tostring等手动实现,或用ide生成、lombok的@tostring注解简化。

Java 中 toString 方法默认输出的是 类名@哈希值(十六进制),比如 Person@1b6d3586。这显然不直观,也不便于调试或日志查看。要自定义格式,核心就是**重写(Override)toString 方法**。
为什么默认格式不实用
Object 类中定义的 toString() 返回的是:getClass().getName() + "@" + Integer.toHexString(hashCode())
这个哈希值每次运行可能不同,和对象实际内容完全无关,无法反映对象状态。
手动重写 toString 方法
在你的类中显式写出 public String toString(),返回你想要的字符串。常见写法有:
- 用字符串拼接:简洁直接,适合字段少的类
- 用
String.format():格式清晰,支持占位符 - 用
Objects.toString()或Objects.deepToString()处理 null 字段,避免空指针
示例:
public class Person {
private String name;
private int age;
// 构造、getter 等略
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
调用 new Person("张三", 25).toString() 就会输出:Person{name='张三', age=25}
用 IDE 自动生成(推荐)
IntelliJ IDEA 和 Eclipse 都支持一键生成 toString:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- IntelliJ:右键 → Generate → toString() → 勾选需要包含的字段 → 选择模板(如 “StringBuilder” 或 “String.format”)
- Eclipse:右键 → Source → Generate toString()
生成结果可读性强,还自动处理了 null 安全(例如用 Objects.toString(name))。
进阶:用 Lombok 简化(零样板代码)
添加 Lombok 依赖后,在类上加 @ToString 注解即可:
@ToString
public class Person {
private String name;
private int age;
}
Lombok 编译时自动生成标准格式的 toString,支持排除字段(@ToString(exclude = "age"))、调用父类(callSuper = true)等。
不复杂但容易忽略 —— 只要重写一次,打印、日志、调试就立刻变友好。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










