码迷,mamicode.com
首页 > 其他好文 > 详细

为什么重写equals还要重写hashcode

时间:2019-12-18 21:42:23      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:col   hashmap   相同   new   调用   数值   快速   结合   return   

在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 ...)的时候就违背了原有集合的原则。

为什么重写equals还要重写hashcode

标签:col   hashmap   相同   new   调用   数值   快速   结合   return   

原文地址:https://www.cnblogs.com/wrl123/p/12063656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!