标签:reac ref 根据 期望 key shc one his nal
1.自反性最终要的一点是在重写equals的时候必须要重写hashcode
如果两个对象根据equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashcode方法都必须产生同样的整数结果。如果调用eqauls方法去比较两个对象,如果两个对象是不相等的,则不一定产生不同的hashcode.
就有如下的例子
public final class PhoneNumber{
private final short areaCode;
private final short prefix;
private final short lineNumber;
public PhoneNumber(int areaCode,int prefix,int lineNumber){
this.areaCode=areaCode;
this.prefix=prefix;
this.lineNumber=lineNumber;
}
}
实例化 PhoneNumber t1=new PhoneNumber(2,3,4);
PhoneNumber t2=new PhoneNumber(2,3,4);
将ti作为key存储如下:
map.put(t1,"jack");
再用t2去取数据的时候,我们期望得到的数据为jack,但是实际我们得到的是null;这是为什么呢?
因为PhoneNumber 没有重写hashCode 方法,就两个相同的对象产生了不同的hashcode,而在get的时候我们根据t2所在散列桶中去找之前的数据,当然是找不到的,put的数据在t1,所在的散列桶中,所以用t2去找的时候当然为null;
因此在重写equals的时候必须重写hashcode方法。
标签:reac ref 根据 期望 key shc one his nal
原文地址:http://blog.51cto.com/13919712/2284385