面试重点掌握toString()、equals()和hashCode()三个强关联方法:toString()需返回关键字段的可读字符串且避免耗时操作;equals()须先判地址、空值和类型,再用Objects.equals逐字段比较;hashCode()必须与equals逻辑一致,用Objects.hash且字段完全匹配。

面试中真正要重点掌握的 Object 类方法其实就三个: toString()、equals() 和 hashCode()。它们不是孤立存在的,而是彼此强关联,答清楚逻辑关系比罗列全部方法更重要。
toString():调试时的第一眼信息
默认输出像 User@1b6d3586 这种内容,对排查问题毫无帮助。重写目标很明确:返回关键字段组成的可读字符串,比如 "User{id=101, name='Alice'}"。
注意别在 toString() 里做耗时操作(如远程调用、数据库查询),它可能被日志框架或 IDE 在任意线程中频繁调用。
equals():判断“内容相等”的逻辑起点
默认用 == 比较内存地址,业务对象几乎都得重写。常见错误是只判字段,忽略基础校验:
• 先检查 this == obj(地址相同直接返回 true)
• 再判 obj == null 和 getClass() != obj.getClass()(用 getClass() 而非 instanceof,避免继承场景下破坏对称性)
• 最后逐字段比较,引用类型用 Objects.equals(a, b) 防空指针
hashCode():和 equals 绑定的“定位凭证”
只要 a.equals(b) 返回 true,a.hashCode() 就必须等于 b.hashCode()。否则放进 HashMap 或 HashSet 后,对象可能找不到、重复存入。
生成方式推荐 Objects.hash(field1, field2),参与计算的字段必须和 equals 中完全一致,且不能包含可变字段(如后期会修改的 status、updateTime)。
立即学习“Java免费学习笔记(深入)”;
其他方法简单区分用途即可
• getClass():final 方法,不能重写,用于精确类型判断(比 instanceof 更严格)
• wait/notify/notifyAll:必须在 synchronized 块中调用,用于线程协作,不是替代 sleep 的工具
• clone():默认浅拷贝,需实现 Cloneable 接口;深拷贝要手动处理引用字段
• finalize():已废弃,不应依赖它释放资源


















