Java中Object类的三大核心方法是toString()、equals()和hashCode():toString()需重写以输出有意义字段信息;equals()重写必须同时重写hashCode(),且遵循空值、类型、字段逐一对比规范;hashCode()要求等价对象哈希值相等,参与计算的字段须与equals一致且不可变。

Java 中 Object 类是所有类的根父类,面试常考三大核心方法:toString()、equals() 和 hashCode()。答好这三问,关键不是背定义,而是讲清“为什么重写”和“怎么正确重写”。
toString():别让打印只输出地址
默认行为是返回 类名@哈希码(如 Student@1b6d3586),对调试和日志毫无价值。重写目标是返回有意义的字段信息。
- 必须用
@Override显式标注,避免拼写错误 - 推荐用
Objects.toString()或 Lombok 的@ToString避免空指针 - 不建议在
toString()中调用其他对象的复杂方法(如远程查询),可能引发阻塞或异常
equals():内容相等 ≠ 地址相同
默认实现仅比较引用(this == obj),业务中几乎总要重写。但必须同时重写 hashCode(),否则放入 HashMap 等集合会出错。
- 重写时先判空:
if (obj == null) return false; - 再判类型:
if (getClass() != obj.getClass()) return false;(用instanceof有继承风险) - 最后逐字段比较,注意基本类型用
==,引用类型用Objects.equals(a, b)
hashCode():等价对象必须等哈希
合同约定:如果 o1.equals(o2) 为 true,那么 o1.hashCode() == o2.hashCode() 必须成立。反过不强制,但冲突越少越好。
立即学习“Java免费学习笔记(深入)”;
- 常用生成方式:IDE 自动生成(IntelliJ / Eclipse),或用
Objects.hash(field1, field2) - 参与计算的字段,必须和
equals()中一致;不可包含可变字段(如时间戳、计数器) - 若类不可变(
final字段),哈希值可缓存,提升性能
其他常考方法简要说明
getClass() 返回运行时类对象,不能重写;wait()/notify() 用于线程通信,需在同步块中调用;clone() 默认浅拷贝,实现深拷贝需手动处理引用字段;finalize() 已废弃,不应依赖它释放资源。


















