为什么重写了hashcode以后,用==比较两个同类型的对象还是false呢?

如题所述

==是比较两个变量是否引用的同一个对象,与是否重写了hashCode或equals无关。

因为图中p1和p2引用的是两个对象,==比较的结果当然是false。

如果将第2行改成:
people p2=p1;
==的结果就是true了。

如果要比较值是否相等,得重写equals方法(如果直接使用从Object类继承的equals,比较的还是引用,与==相同),如果重写了equals方法也应该重写hashCode方法,使调用equals进行比较结果为true的两个对象调用它们的hashCode也返回相同的值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-01-31
==比较对象是否相等,需要满足两个条件。hashcode方法和equals方法也需要重写,如果两个对象在hashcode和字面量值比较(equals)上都相等,才能说这两个对象一样。

总的来说hashcode一样,两个对象不一定相同,还需要比较equals;两个对象一样,它们的hashcode必定一样。

如果满意,望采纳,谢谢!