Java中Object类的equals()和hashCode()方法深入解析
来源:互联网 发布:tensorflow mnist代码 编辑:程序博客网 时间:2024/06/08 08:53
原文来自:http://www.cnblogs.com/return/archive/2009/11/06/1597611.html
1.equals()
在初学Java的时候,很多人会说在比较对象的时候,==是比较地址,equals()是比较对象的内容,谁说的?
看看equals()方法在Object类中的定义:
return (this == obj);
}
这是比较内容么?明显是比较指针(地址)么...
但是为什么会有equals是比较内容的这种说法呢?
因为在String、Double等封装类中,已经重载(overriding)了Object类的equals()方法,于是有了另一种计算公式,是进行内容的比较。
比如在String类中:
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类中的定义为:
是一个本地方法,返回的对象的地址值。
但是,同样的思路,在String等封装类中对此方法进行了重写。方法调用得到一个计算公式得到的 int值
3.两者的关系
①两个obj,如果equals()相等,hashCode()一定相等
②两个obj,如果hashCode()相等,equals()不一定相等
原因:从散列的角度考虑,不同的对象计算哈希码的时候,可能引起冲突,大家一定还记得数据结构中冲突的解决方案吧
但是要这么设计,用两个函数,个人的理解是为了比较两个对象时更高效。
可以考虑在Java集合中,判断两个对象是否相等的规则是:
第一步,如果hashCode()相等,则查看第二步,否则不相等;
第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。
为什么这样做?个人的理解是让适当的函数完成适当的功能,毕竟hashCode()比equals()在某种程度上来得快。
(个人心得,若有错误,请指正)
- Java中Object类的equals()和hashCode()方法深入解析
- Java中Object类的equals()和hashCode()方法深入解析
- Java中Object类的equals()和hashCode()方法深入解析
- Java中Object类的equals()和hashCode()方法深入解析
- Java中Object类的equals()和hashCode()方法深入解析
- Java中Object类的equals()和hashCode()方法
- Object类中equals,hashCode和toString方法的学习
- Java源码学习-Object类的hashCode和equals方法
- Java中重写Object类的equals方法和hashcode方法的注意事项
- Java中重写Object类的equals方法和Hashcode方法的注意事项
- java中hashCode() 和 equals()方法的解析
- 深入解析Java中的equals()和hashCode()方法
- java Object对象中hashCode和equals方法学习
- Object的hashCode方法和equals方法
- java.lang.Object的equals()和hashCode()方法小结
- Java记录 -57- Object的equals、hashcode和toString方法
- 深入理解Java 中hashcode() 和equals()方法
- JAVA中Object的equals和hashCode的关联
- Android开发经验、能力提升
- bridge模式
- hibernate 关系映射
- 嵌入式ARM多核处理器并行化方法
- 无线通信数字表示及数的原码、反码、补码
- Java中Object类的equals()和hashCode()方法深入解析
- 实现图片的点击拖动与多指放大缩小
- 3-sum问题
- RHEL7.2 安装Oracle11g 弹窗异常问题
- unity—Tab键切换输入框
- 欢迎使用CSDN-markdown编辑器
- 利用Scanner类从输入流中获取数据以及next()、nextXxx()、nextLine()方法辨析
- ibatis自定义DataSourceFactory
- XYNUOJ 1095 折半查找