hashcode和equals

若两个对象equals相等(重写了equals方法),但不在一个区间(没有重写hashcode方法),由于hashCode的值在重写以前是对内存地址计算得出,因此根本没有机会进行比较,会被认为是不一样的对象。因此Java对于eqauls方法和hashCode方法是这样规定的: 
1 若是两个对象相同,那么它们的hashCode值必定要相同。也告诉咱们重写equals方法,必定要重写hashCode方法,也就是说hashCode值要和类中的成员变量挂上钩,对象相同–>成员变量相同—->hashCode值必定相同。 
2 若是两个对象的hashCode相同,它们并不必定相同,这里的对象相同指的是用eqauls方法比较。spa

注意:仅仅重写equals方法,按道理应该是不对的,在重写equals方法时,也要重写hashcode方法,而且要保持判断的一致性。作到相等(equals)的两个对象的hashcode必定要相同。.net

hashset,hashmap中放入对象时,会先判断hashcode,hashcode不一样,则认为是不一样的对象;若是hashcode相同,则去比较equals,若是equals不一样,则认为不一样对象,相同则认为是相同对象。(实际上他还用==比较了对象,请看下面连接所写文章)code

https://blog.csdn.net/qq_21688757/article/details/53067814?ticket=ST-56532-unjRzSC7ufBt3I3nKejO-passport.csdn.net对象

相关文章
相关标签/搜索