Java中Object类的equals()和hashCode()办法深化解析[Java编程]
本文“Java中Object类的equals()和hashCode()办法深化解析[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1.equals()
在初学Java的时刻,很多人会说在对比对象的时刻,==是对比地址,equals()是对比对象的内容,谁说的?
看看equals()办法在Object类中的定义:
public boolean equals(Object obj){
return (this == obj);
}
这是对比内容么?明显是对比指针(地址)么...
但是为什么会有equals是对比内容的这种说法呢?
因为在String、Double等封装类中,已经重载(overriding)了Object类的equals()办法,于是有了另一种计算公式,是举行内容的对比.
比方在String类中:
public int hashCode() {
int h = hash;
if (h == 0) {
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
2.hashCode()
在Object类中的定义为:
public native int hashCode();
是一个本地办法,返回的对象的地址值.
但是,一样的思绪,在String等封装类中对此办法举行了重写.办法调用得到一个计算公式得到的int值
3.二者的关系
①两个obj,假如equals()相等,hashCode()一定相等
②两个obj,假如hashCode()相等,equals()不一定相等
缘由:从散列的角度考虑,差别的对象计算哈希码的时刻,大概惹起冲突,大家一定还记得数据构造中冲突的办理筹划吧
但是要这么计划,用两个函数,个人的理解是为了对比两个对象时更高效.
可以考虑在Java调集合,判断两个对象能否相等的法则是:
第一步,假如hashCode()相等,则查看第二步,不然不相等;
第二步,查看equals()能否相等,假如相等,则两obj相等,不然还是不相等.
为什么这样做?个人的理解是让得当的函数完成得当的功效,毕竟hashCode()比equals()在某种程度上来得快.
以上是“Java中Object类的equals()和hashCode()办法深化解析[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |