equals与hashcode

2020-05-28  本文已影响0人  remoteMountain

为什么重写了equals ,必须要重写hashcode函数。

String a = new String("abc");
String b = "abc";

System.out.println(a.equals(b)); //true
System.out.println(a == b); // false

Map<String> map = new HashMap();
map.put(a,1);
 System.out.println(map.get(a)); //1
map.put(b,2);
System.out.println(map.get(a)); //2

以String为例,a和b的equals比较结果为true。如果没有重写hashcode函数,则使用的是Object类中的实现,Object类中的hashcode函数对于两个不同对象返回不同的值。试想下,如果用a和b作为HashMap中的key去调用put方法,则得到的数组下标必然不同,然而两者的equals比较却相同,产生了矛盾。

上一篇 下一篇

猜你喜欢

热点阅读