String的hashCode方法源码
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
String重写了Object的hashCode方法,如果没有重写该方法默认返回的是对象的内存地址。
由于String重写了hashCode采用的算法即上面源码 ,是会出现两个不同对象hashCode相同的情况的。
如果重写了equals方法则必定要重写hashCode方法
因为以set集合为例,它用equals方法判断两个对象是否相等,如果两个对象相等但是hashCode不同,这时候set是会添加成功的 又与set规则冲突