社区
Java SE
帖子详情
关于hashCode()和equals()的本质区别和联系
kingzhui005
2009-06-05 11:55:32
关于hashCode()和equals()的本质区别和联系
老师当时讲我没听多懂,
麻烦大家,
把所有跟这两个方法有关的知识都说说。、
非常感谢
...全文
120
14
打赏
收藏
关于hashCode()和equals()的本质区别和联系
关于hashCode()和equals()的本质区别和联系 老师当时讲我没听多懂, 麻烦大家, 把所有跟这两个方法有关的知识都说说。、 非常感谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Rangxing
2009-06-08
打赏
举报
回复
看JDK文档/...
longq121
2009-06-08
打赏
举报
回复
学习
Yedy2000
2009-06-08
打赏
举报
回复
mark
xjsglg
2009-06-08
打赏
举报
回复
1、首先equals()和hashcode()这两个方法都是从object类中继承过来的。
equals()是对两个对象的地址值进行的比较(即比较引用是否相同)。
hashCode()是一个本地方法,它的实现是根据本地机器相关的。
2、Java语言对equals()的要求如下,这些要求是必须遵循的:
• 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
• 反射性:x.equals(x)必须返回是“true”。
• 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
• 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
• 任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
3、equals()相等的两个对象,hashcode()一定相等;
反过来:hashcode()不等,一定能推出equals()也不等;
hashcode()相等,equals()可能相等,也可能不等。
参考地址:http://honda418.javaeye.com/blog/342731
ZangXT
2009-06-07
打赏
举报
回复
[Quote=引用 9 楼 rommal7090 的回复:]
另外若2个对象的hashcode相等则2个对象equals
[/Quote]
晕,正好说反了。
愤怒的月光
2009-06-07
打赏
举报
回复
Effective Java
讲得比较详细
equals()方法
1. 自反
2. 对称
3. 传递
4. 一致
5. X非空,x.equals(null)返回false
为了实现高质量的equals()改写,effective java提醒我们要注意一下几点:
1. 使用==操作符检查是否指向同一个对象,这是一个性能优化的手段。
2. 使用instanceof来检查是否为某个类,同样也是性能优化的手段。
3. 把实参转换到正确的类型,上面一步保证了这一步不会有错误。
4. 检查类里的每一个关键域是否都相等。
hashCode()则是一种计算 对象的散列值
任何 classes 如果复写了 equals(), 便应该同时也复写 hashCode()
这个正解,另外若2个对象的hashcode相等则2个对象equals
ageha67
2009-06-07
打赏
举报
回复
学习。。。。
blliy117
2009-06-05
打赏
举报
回复
Effective Java
讲得比较详细
equals()方法
1. 自反
2. 对称
3. 传递
4. 一致
5. X非空,x.equals(null)返回false
为了实现高质量的equals()改写,effective java提醒我们要注意一下几点:
1. 使用==操作符检查是否指向同一个对象,这是一个性能优化的手段。
2. 使用instanceof来检查是否为某个类,同样也是性能优化的手段。
3. 把实参转换到正确的类型,上面一步保证了这一步不会有错误。
4. 检查类里的每一个关键域是否都相等。
hashCode()则是一种计算 对象的散列值
任何 classes 如果复写了 equals(), 便应该同时也复写 hashCode()
maosenmin
2009-06-05
打赏
举报
回复
给你一个网上的参考:http://zhidao.baidu.com/question/47831363.html
http://lxj8495138.javaeye.com/blog/286024
lulu0126
2009-06-05
打赏
举报
回复
在判断对象或变量是否相等上得到结果是一样的!
请大虾们指正!
lulu0126
2009-06-05
打赏
举报
回复
个人意见:
equals()反映的是对象或变量具体的值。
而hashCode()是对象或变量通过哈希算法计算出的哈希值
APOLLO_TS
2009-06-05
打赏
举报
回复
如果出现 类名@23ac3265
那个@后的值就是散列码,你可以认为那个是对象的地址value
zhulin1113
2009-06-05
打赏
举报
回复
判断2个对象指向的地址是否相同,也就是2对象是否相等用hashcode
判断2个对象的值是否相等就用equals
简单的理解。。。
hashcode就相当于"=="
oklinsong
2009-06-05
打赏
举报
回复
用来判断两个对象是否相等,若相等则两个对象的hashcode 也是一样的。
详解
hashCode
()和
equals
()的
本质区别
和
联系
主要介绍了详解
hashCode
()和
equals
()的
本质区别
和
联系
,本文先对两种方法作了介绍,然后对二者
联系
进行分析,具有一定参考价值,需要的朋友可以了解下。
超实用的面试题整理
阿里面试题及答案。HashMap有一个叫做Entry的内部类,它用来存储key-value对。 · 上面的Entry对象是存储在一个叫做table的Entry数组中。 · table的索引在逻辑上叫做“桶”(bucket),它存储了链表的第一个元素。 · key的
hashcode
()方法用来找到Entry对象所在的桶。 · 如果两个key有相同的hash值,他们会被放在table数组的同一个桶里面。 · key的
equals
()方法用来确保key的唯一性。 · value对象的
equals
()和
hashcode
()方法根本一点用也没有。 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。 HashMap存数据的过程是: HashMap内部维护了一个存储数据的Entry数组,HashMap采用链表解决冲突,每一个Entry本质上是一个单向链表。当准备添加一个key-value对时,首先通过hash(key)方法计算hash值,然后通过indexFor(hash,length)求该key-value对的存储位置,计算方法是先用hash&0x7FFFFFFF;后,再对length取模,这就保证每一个key-value对都能存入HashMap中,当计算出的位置相同时,由于存入位置是一个链表,则把这个key-value对插入链表头。
hashCode
和
equals
的区别
hashCode
和
equals
的区别
hashcode
介绍
hashCode
() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
hashCode
() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有
hashCode
() 函数。 通过调用
hashCode
()方法获取对象的hash值
equals
介绍
equals
它的作用也是判断两个对象是否相等,如果对象重写了
equals
()方法,比较两个对象的内容是否相等;如果没
重写
hashCode
和
equals
hashCode
和
equals
重写 重写
hashCode
和
equals
时需注意一点,
equals
相等则
hashCode
一定相等(相同对象hash值一致);
hashCode
相同
equals
不一定相等(hash值相同不能确定为同一个对象)。所以重写时要保证
hashCode
的字段和
equals
的字段相同,否则会导致相同对象有不同的hash值! 重写
hashCode
Object中的
hashCode
为native方法,我们对类的
hashCode
重写本质上只是调用Object中的
hashCode
进行二次运算,不一定
HashCode
和
Equals
的关系
HashCode
和
Equals
的关系
Java SE
62,614
社区成员
307,319
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章