星海

Java 基础 · 单选题 · 第 2 题

Java 后端开发面试 · 第 2 题

关于 equals() 和 hashCode() 的约定,下列说法正确的是?

  1. A两个对象 equals 返回 true 时,它们的 hashCode 必须相等
  2. B两个对象 hashCode 相等时,它们 equals 一定返回 true
  3. C只重写 equals 不重写 hashCode,对 HashMap 没有影响
  4. DhashCode 必须对每个不同的对象返回互不相同的值

答案

A A. 两个对象 equals 返回 true 时,它们的 hashCode 必须相等

解析

HashMap 先用 hashCode 定位桶,再用 equals 比较键;相等的对象如果哈希值不同,会落进不同的桶,导致 get 不到或者出现重复键。反过来,哈希值相等的对象不一定 equals,这就是哈希冲突,是允许的。所以重写 equals 时必须一起重写 hashCode。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。