page contents

为什么重写equals时必须重写hashCode方法?(重要)

轩辕小不懂 发布于 2022-08-31 09:53
阅读 991
收藏 0
分类:Java开发
4209
Nen
Nen
- 程序员

当对象的equals()方法被重写时,通常有必要重写 hashCode() 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

(1)两个对象相等,hashcode一定相等

      (2)两个对象不等,hashcode不一定不等

      (3)hashcode相等,两个对象不一定相等

      (4)hashcode不等,两个对象一定不等

      hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。这样**如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致**。

请先 登录 后评论