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 是深拷贝。