本帖最后由 吴愿涛 于 2012-11-1 21:26 编辑
只是为了维护 hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同.equals()和hashCode()都来自java.lang.Object.你当然可以重写.比如a.equals(b).仅当a的内存地址相等时,才返回true.当然如String等类已经对这个方法进行了重写,比较的就不再是内存地址了.hashCode()的值也是与内存地址相关的.所以仅当内存地址相等时,hashCode才相等.同样很多类也重写了这个方法,还是以String为例:
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
就不在与内存地址相关了.这样做是为了保证用equals比较返回为true的两个对象,他们的hashCode是相同的.所以一般重写equals的时候都会重写hashCode().
|