2018-12-11
1、hashCode的存在主要是用于查找的快捷性,为了配合基于散列的集合正常运行,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
2、如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,它们存放在同一个桶里面
equals()
public boolean equals(Object obj) {
return (this == obj);
}
有2种情况:
- 对于一般对象来说,使用equals方法判断的其实是2个对象是否是同一对象
- 对于覆盖了equals方法的类来说,一般会在方法里通过比较类的内容来决定返回值
hashCode()
这里的hashCode也有2种情况:
- 对一般的类,hashCode返回一个对象的哈希值,和equals没有关系
- 对某些特殊类,会创建类对应的散列表,这些类的hashCode方法有如下意义,如果值相同,那么hashCode返回值相同,即散列值相同,反之不成立
网友评论