hascode()与equals()

这两个方法重写一个时必须重写另一个,否则使用hashmap等集合时可能会发生错误,在java的集合中,判断两个对象是否相等的规则是:

 

1),判断两个对象的hashCode是否相等

如果不相等,认为两个对象也不相等,完毕
如果相等,转入2)

2),判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)
为什么是两条准则,难道用第一条不行吗?不行,因为前面已经说了,hashcode()相等时,equals()方法也可能不等,所以必须用第2条准则进行限制,才能保证加入的为非重复元素。
比如下面的代码

 

由以上规则也可以看出:equals()相等的两个对象,hashcode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。

 

如果重写了某个类的equals()方法而不重写hashCode()方法,那么很有可能出现这种情况:将两个用equals()判断相等的对象放到hashmap中,却因为其hashCode()不等而认为不等(hashCode默认利用其引用地址来计算的),从而都放了进去,这就违背了java所制定的规则。

你可能感兴趣的:(equals())