Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

“相同对象”可能有不同的 hashCode 吗?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

先明确“相同”是什么意思。如果两个对象按 equals() 判断相等,合规实现必须让它们的 hashCode 相同。如果指同一个对象在不同时间被修改,相等性相关状态变化后,哈希值可以变化;如果比较不同运行过程,也不能无条件要求数值不变。

讲清原理

题目把对象身份、逻辑相等和时间混在了一起。两个内容相同但不是同一实例的值对象,也需要遵守 equals/hashCode 约定。若一个类只重写 equals,却继承不匹配的 hashCode,程序可能违约,不是语言规则允许它随便返回不同值。

对同一对象,一致性要求有一个前提:参与 equals 判断的信息没有改变。可变键被放入 HashMap 后又改变这些信息,可能让它在错误的候选位置上“失联”。

例子与易错点

record Key(int id) {}
var x = new Key(1);
var y = new Key(1);
System.out.println(x.equals(y)); // true
System.out.println(x.hashCode() == y.hashCode()); // true

面试时先说明比较的是“同一时刻的逻辑相等”,再给结论,比直接回答“永远不能”更准确。

相关题:第 11 题、第 37 题、第 57 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。