专栏大白话说Java面试题 — 01-Java基础篇第38题两个对象的hashCode()相同则equals()是否也一定为 true回答核心概念在 Java 中hashCode()和equals()是两个重要的方法它们之间的关系遵循以下规则如果两个对象通过equals()方法比较为true那么它们的hashCode()必须相等。如果两个对象的hashCode()相同它们通过equals()比较的结果不一定为true。1. 原因分析哈希冲突hashCode()的返回值是一个整数而整数的范围是有限的32位。因此在大量对象中可能会出现不同的对象生成相同的hashCode()值这就是哈希冲突。即使两个对象的hashCode()相同它们的内容由equals()定义可能完全不同。规范要求Java 规范要求如果两个对象通过equals()比较为true它们的hashCode()必须一致但反之则不一定成立。代码示例以下代码展示了hashCode()相同但equals()不同的情况classPerson{privateStringname;publicPerson(Stringname){this.namename;}OverridepublicinthashCode(){return1;// 强制所有对象返回相同的哈希值}Overridepublicbooleanequals(Objectobj){if(thisobj)returntrue;if(objnull||getClass()!obj.getClass())returnfalse;Personperson(Person)obj;returnname.equals(person.name);}}publicclassMain{publicstaticvoidmain(String[]args){Personp1newPerson(Alice);Personp2newPerson(Bob);System.out.println(p1.hashCode()p2.hashCode());// 输出 trueSystem.out.println(p1.equals(p2));// 输出 false}}面试官视角面试官可能会问“为什么需要重写hashCode()和equals()”答为了保证集合类如HashMap、HashSet的正确性避免因为哈希冲突导致数据存储或查找失败。面试官可能会追问“如何正确重写hashCode()和equals()”答可以使用 IDE 自动生成工具或者手动基于对象的关键属性实现一致性逻辑。