11问答网
所有问题
为什么重写了hashcode以后,用==比较两个同类型的对象还是false呢?
如题所述
举报该问题
推荐答案 2021-01-31
==是比较两个变量是否引用的同一个对象,与是否重写了hashCode或equals无关。
因为图中p1和p2引用的是两个对象,==比较的结果当然是false。
如果将第2行改成:
people p2=p1;
==的结果就是true了。
如果要比较值是否相等,得重写equals方法(如果直接使用从Object类继承的equals,比较的还是引用,与==相同),如果重写了equals方法也应该重写hashCode方法,使调用equals进行比较结果为true的两个对象调用它们的hashCode也返回相同的值。
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://11.wendadaohang.com/zd/F7Pv2FF442MMMP2S8S7.html
其他回答
第1个回答 2021-01-31
==比较对象是否相等,需要满足两个条件。hashcode方法和equals方法也需要重写,如果两个对象在hashcode和字面量值比较(equals)上都相等,才能说这两个对象一样。
总的来说hashcode一样,两个对象不一定相同,还需要比较equals;两个对象一样,它们的hashcode必定一样。
如果满意,望采纳,谢谢!
相似回答
为什么
输出都是
false?
答:
1.String类
重写了
equals方法,它的对象比较的时候会去比值,而不是地址,就像基本数据类型那样。2.当输出s1和s2的hashCode()时,会发现也是相等的,内存地址也
相同
吗?好吧,其实String类又改写
了hashCode
方法(见api,equals方法被重写时,通常有必要重写 hashCode 方法)。以上两点,使String
类的对象
操作...
大家正在搜
相关问题
C#自定义类型重写equals后为啥同值返回还是false?...
JAVA中为什么两个不同的对象hashCode有可能会相同?
java中的调用覆写equals+hashCode后是否就等...
比较两对象为什么要重写hashCode方法
java中重写了equals方法后,HashSet表中的co...
为什么同时重写hashcode和equals方法
java中如果重写了hashCode()方法 那么equal...
为什么在重写了equals()方法之后也必须重写hashCo...