读书人

equals 与 hashCode?

发布时间: 2012-12-28 10:29:05 作者: rapoo

equals 与 hashCode???

只是为了维护 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().当然,这个相当于一个约定,一个协议.你不这么做并不会错. 

读书人网 >编程

热点推荐