【大白话说Java面试题】【Java基础篇】第27题:为什么重写equals时必须重写hashCode方法 大厂规范Java项目工具类 — 13_雪花算法ID生成器Java企业级代码第27题为什么重写equals时必须重写hashCode方法回答背景知识根据Java规范两个对象通过equals方法比较相等时它们的hashCode值也必须相等。这是为了保证集合类如HashMap、HashSet的正确性。问题原因如果只重写equals方法而不重写hashCode方法可能导致以下问题equals返回true但hashCode值不同。这会导致在集合类如HashMap中无法正确存储和查找对象。底层原理HashMap等集合类通过hashCode计算元素的存储位置。如果两个对象equals相等但hashCode不同它们会被存储在不同的位置导致查找失败。代码示例以下代码展示了未重写hashCode的问题classPerson{privateStringname;publicPerson(Stringname){this.namename;}Overridepublicbooleanequals(Objecto){if(thiso)returntrue;if(onull||getClass()!o.getClass())returnfalse;Personperson(Person)o;returnname.equals(person.name);}// 未重写hashCode方法}publicclassMain{publicstaticvoidmain(String[]args){Personp1newPerson(Alice);Personp2newPerson(Alice);System.out.println(p1.equals(p2));// 输出 trueSystem.out.println(p1.hashCode()p2.hashCode());// 输出 false}}解决方法重写hashCode方法确保equals相等的对象具有相同的hashCode值。例如OverridepublicinthashCode(){returnObjects.hash(name);}面试官视角面试官可能会问“为什么集合类依赖hashCode”答hashCode用于快速定位元素的存储位置减少查找时间。面试官可能会追问“如何正确重写equals和hashCode”答可以使用IDE生成工具或者手动基于对象的关键属性实现一致性逻辑。觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~