← 学习中心

Java 基础:equals/hashCode/clone 与 Object

Object 类核心方法契约,equals 与 hashCode 必须同时重写的铁律,clone 的浅拷贝陷阱。

本节你将能

讲清 Object 的关键方法契约,尤其是为什么 equals 与 hashCode 必须成对重写。

核心要点

  • equals 自反、对称、传递、一致;仅当「逻辑相等」时返回 true。
  • hashCode 契约:相等的对象必有相等哈希;但哈希相等对象不一定相等(哈希冲突)。
  • 只重写 equals 不重写 hashCode,对象用作 HashMap 的 key 时会「存得进、取不出」。
  • clone 是浅拷贝:引用类型字段仍指向同一对象;深拷贝需递归 clone 或序列化。
  • String 重写了 equals 按内容比较;Integer 缓存 -128~127。

面试连招

常被追问:为什么 hashCode 用 31 素数?String 为什么不可变?Integer 缓存范围?

常见坑

用可变字段参与 equals/hashCode,导致对象在集合中「丢失」;误以为 clone 是深拷贝。

Java 基础:equals/hashCode/clone 与 Object | 必学必会