Java 基础 · 单选题 · 第 2 题
Java 后端开发面试 · 第 2 题
关于 equals() 和 hashCode() 的约定,下列说法正确的是?
- A两个对象 equals 返回 true 时,它们的 hashCode 必须相等
- B两个对象 hashCode 相等时,它们 equals 一定返回 true
- C只重写 equals 不重写 hashCode,对 HashMap 没有影响
- DhashCode 必须对每个不同的对象返回互不相同的值
答案
A A. 两个对象 equals 返回 true 时,它们的 hashCode 必须相等
解析
HashMap 先用 hashCode 定位桶,再用 equals 比较键;相等的对象如果哈希值不同,会落进不同的桶,导致 get 不到或者出现重复键。反过来,哈希值相等的对象不一定 equals,这就是哈希冲突,是允许的。所以重写 equals 时必须一起重写 hashCode。