equals与hashcode

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

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

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

Map 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比较却相同,产生了矛盾。

你可能感兴趣的:(equals与hashcode)