为什么重写equals还要重写hashcode

在Object类中equals方法如下:

public boolean equals(Object obj) {
    return (this == obj);
}

对于引用类型的对象,比较的是两者的内存地址。而hashCode:返回的是对象的内存地址。

在Object类的hashcode()方法上写到:

1、在JAVA程序执行期间,同一对象多次调用hashcode方法时,应返回相同的整数,前提是该对象equals时所用的值未被修改。

2、如果两个对象equals(Object o)相等,那么它们的hashcode值也应该相同。

3、如果两个对象的equals(Object o)不相等,那么它们的hashcode方法所得到的的整数值不一定不同。  

 hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。如果我们将对象的equals方法重写而不重写hashcode,当我们再次new一个新的对象的时候,equals方法返回的是true,但是hashCode方法返回的就不一样了,如果需要将这些对象存储到结合中(比如:Set,Map ...)的时候就违背了原有集合的原则。

posted @ 2019-12-18 20:57  任平生vip  阅读(332)  评论(0)    收藏  举报