Java为什么重写equals方法时必须重写hashcode方法

面试的时候面试官问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” 该如何回答?下面就是答案

是的,当我们在自定义类中需要比较对象的相等性时,通常需要重写equals()方法和hashCode()方法。

equals()方法用于判断两个对象是否相等,我们可以根据自己的需求来定义对象的相等性。在重写equals()方法时,我们需要满足以下几个规则:

1. 自反性:对于任何非null的引用值x,x.equals(x)应该返回true。
2. 对称性:对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)应该返回true。
3. 传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应该返回true。
4. 一致性:对于任何非null的引用值x和y,只要对象上的值没有修改,多次调用x.equals(y)应该始终返回相同的结果。
5. 对于任何非null的引用值x,x.equals(null)应该返回false。

hashCode()方法用于返回对象的哈希码值。哈希码值用于在哈希表等数据结构中快速定位对象,并提高查找效率。当重写equals()方法时,我们必须同时重写hashCode()方法,以确保对象相等的时候它们的哈希码值也相等。

根据规范,如果两个对象相等(即equals()方法返回true),那么它们的hashCode()方法应该返回相同的值。如果重写了equals()方法但未重写hashCode()方法,那么两个相等的对象在哈希表中可能无法正确定位,导致无法正常使用。

因此,重写equals()方法时必须同时重写hashCode()方法,以满足对象相等的同时哈希码值也相等的要求。

© 版权声明
THE END
喜欢就支持一下吧
点赞9赞赏 分享