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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容