社区
Java SE
帖子详情
Object类的equals方法和hashCode方法之间有什么关系?
Hesperbugs
2004-01-24 04:23:22
Object类的equals方法是根据hashCode方法返回的散列码判断两个对象的等同性的吗?散列码是怎么生成的,有什么用?跟equals有什么关系?请高手赐教。
...全文
225
10
打赏
收藏
Object类的equals方法和hashCode方法之间有什么关系?
Object类的equals方法是根据hashCode方法返回的散列码判断两个对象的等同性的吗?散列码是怎么生成的,有什么用?跟equals有什么关系?请高手赐教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Hesperbugs
2004-01-27
打赏
举报
回复
to alienbat(死灵巫师) : 谢了
swinging
2004-01-27
打赏
举报
回复
laugh alienbat(死灵巫师) ( )
这种问题,要我解释绝对不如跑去看文档,我就算解释也没有文档精确,至多是把文档搬过来。看了你的解释,我劝你还是不要误人的好,太片面了。
另外,楼主连手边的文档都懒得翻,非要跑到这里来浪费人时间精力给解释,进步太难。
好比楼主眼前一碗粥,自己都过10岁了还非要人喂,
我说:自己动手吃。
居然有人跳出来说:你20多岁的年龄都长哪里去了?连喂下都不会,要他自己动手。
sign
希望楼主自己体会,以后碰到这种问题,到底要怎么处理,是还等人喂?还是自己动手。
alienbat
2004-01-26
打赏
举报
回复
楼上的,你5个三角就是用“看文档”这样的回答混来的吗?
答案:
没有任何关系。但在实现上有共同之处。
在Object类中:
equals方法的实现与"=="运算符的作用是一样的。当且仅当两个Object引用指向同一个地址时,返回true。
hashCode返回的int值与本对象内存地址有关。也就是:当且仅当两个Object引用指向同一个地址时,返回相同的hashCode。
swinging
2004-01-26
打赏
举报
回复
建议直接看JDK DOC中相关文档。
xianliti
2004-01-26
打赏
举报
回复
在Think in Java 中有重点介绍hashcode和equals的部分
leeak
2004-01-25
打赏
举报
回复
equals 是用来 比较2个对象的内容的
danceflash
2004-01-25
打赏
举报
回复
楼上例子有误
String a="123";
String b=a;
String c="123";
在这种情况下,a==b,a==c,a.equals(c) 均为真
应该为:
String a = "123";
String b = a;
String c = new String("123");
那么 a == b 真,a == c 假,a.equals(c) 真
lapwing2002
2004-01-24
打赏
举报
回复
equals是用来比较对象的内容是不是相等
==是用来比较两个引用所指向的对象是不是一个,也就是比较内存地址是不是相同
例如
String a="123";
String b=a;
String c="123";
那么 a==b 真,a==c 假,a.equals(c) 真
至于hashCode是用来将对象放入象Hashtable 之类的容器时使用的,Hashtable 会根据所放入对象的hashCode值来选择不同的Bucket,如果该对象没有提供重写hashCode方法,那么会使用Object类缺省的hashCode方法,即根据其内存地址来计算(这通常不是我们需要的),所以如果希望自己的对象能够正确的放入Hashtable 之类的容器,那么要重写hashCode方法
Hesperbugs
2004-01-24
打赏
举报
回复
equals的默认判断相等的原则是什么?好象跟"=="不一样.
rainight
2004-01-24
打赏
举报
回复
不是。equals可以被你自己重载,你可以编写任何判断相等的原则,默认情况下,是递归比较成员对象依次是否相等。
散列码就是hashCode,是根据hash算法生成的。
Object
类
中的
equals
方法
和
hashCode
方法
今天在看java集合的数据结构时看到,关于
equals
()
方法
和
hashCode
()
方法
的知识点时,发现脑子一空,很慌,回来赶快补一波
equals
方法
的几大特征: 1.自反性 : x.
equals
(x) 结果应该返回true。 2.对称性 : x.
equals
(y) 结果返回true当且仅当y.
equals
(x)也应该返回true。 3.传递性 : x.
equals
(y) 返回true,并且y...
object
类
中的
equals
和
hashcode
方法
equals
():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值
类
型的值。
hashCode
():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根
类
Object
的
hashCode
()
方法
的计算依赖于对象实例的D(内存地址),故每个
Object
对象的
hashCode
都是唯一的;当然,当对象所对应的
类
重写了
hashCode
()
方法
时,结果就截然不同
为什么要同时重写
equals
方法
和
hashCode
方法
(详解)
首先,我们在作比较时,通常调用
equals
方法
来比较(这里指
Object
类
中的
equals
方法
),比较俩个对象的地址值是否一样,地址值相同,则俩个对象相同。地址值不同,则俩个对象不同。 在这里,其实有个问题:当我们向一个集合中插入了一个对象,并且这个集合中有几万条数据,那我们还和之前一样,调用它的
equals
方法
来比较俩个对象是否相等嘛? 当然,可以是可以,但效率必然是个问题。那么在考虑效率的情况下,如何去比较俩个对象是否相等呢,这个时候就用到了
hashCode
方法
。
hashCode
方法
是按照一定的规则将与
Java 细品 重写
equals
方法
和
hashcode
方法
前言 在我们需要比较对象是否相等时,我们往往需要采取重写
equals
方法
和
hashcode
方法
。 该篇,就是从比较对象的场景结合通过代码实例以及部分源码解读,去跟大家品一品这个重写
equals
方法
和
hashcode
方法
。 正文 场景: 我们现在需要比较两个对象 Pig 是否相等 。 而Pig 对象里面包含 三个字段, name,age,nickName ,我们现在只需要认为如果两个pig对象的name名字和age年龄一样,那么这两个pig对象就是一样的,nic...
为什么重写
equals
一定要重写
hashcode
?
Object
类
默认的
equals
比较规则就是比较两个对象的内存地址。而
hashcode
是本地
方法
,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,
hashcode
是根据对象的内存地址经哈希算法得来的
Java SE
62,612
社区成员
307,332
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章