Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相同,那么它们的hashCode值一相同;
2、如果两个对象的hashCode相同,它们并不一定相同。
上面说的对象相同指的是用eqauls方法比较。
简单一点理解:
hashcode可以理解为分组,如果两个对象哈希值相等,则说明这两个对象将分在同一组;接下来比较equals,如果equals也相等,则说明这两个对象相等!
否则,均为不相等!
代码示例:
package sample.com;
import java.util.HashSet;
import java.util.Set;
public class EqualsTest {
public static void main(String[] args) {
Set<A> set = new HashSet<A>();
A a1 = new A();
A a2 = new A();
A a3 = new A();
A a4 = new A();
set.add(a1);
set.add(a2);
set.add(a3);
set.add(a4);
System.out.println(set.size()); // 1
}
}
class A {
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 1;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return true;
}
}