中易网

java 为什么同时重写equals

答案:2  悬赏:60  
解决时间 2021-02-21 06:20
java 为什么同时重写equals
最佳答案
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:
(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true
(2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false
如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等。特别指出利用equals比较八大包装对象
(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址
hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()
全部回答
默认equals在比较两个对象时,是看他们是否指向同一个地址的。 但有时,我们希望两个对象只要是某些属性相同就认为他们的quals为true。比如: student s1 = new student(1,"name1"); student s2 = new student(1,"name1"); 如果不重写equals的话,他们是不相同的,所以我们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老友记面馆我想知道这个在什么地方
百斯特3D立体背景墙湛江总代理地址有知道的么
百度搜索问题答案准确?
有一句歌词是“当我爱上你哪一秒,心就逐渐变
dnf时光机网址在哪里啊
温度中°F和°c是什么意思
怎样和内心孤独的男友相处?
五羊-本田幻影到底怎么样?
霍兰德职业兴趣测试结果求助
桐乡中国蚕丝城地址在什么地方,想过去办事
请问光电二极管对哪种波长的光起作用?
梦将衣服丢在她人家
无锡凯莱大饭店地址在什么地方,想过去办事
win8.1激活。求大神。。。。
为什么苹果手机1200万像素比国产手机2000万像
推荐资讯
CC&DD我想知道这个在什么地方
睿俊驾校(佛山顺德)怎么去啊,我要去那办事
老地点休闲足浴在哪里啊,我有事要去这个地方
walk along 和 walk around的区别
大庆仓买地址在什么地方,想过去办事
在单位受气太多,受利用太多,改变工作环境难
美味轩在哪里啊,我有事要去这个地方
88年买的猫眼戒指现在值多少钱?
深爱和喜欢的区别?
易佰连锁旅店方庄桥店这个地址在什么地方,我
python3.1 中有没有cPickle模块啊
柏衣惠在什么地方啊,我要过去处理事情
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?