美文网首页
equals与hashcode

equals与hashcode

作者: remoteMountain | 来源:发表于2020-05-28 21:26 被阅读0次

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

    相关文章

      网友评论

          本文标题:equals与hashcode

          本文链接:https://www.haomeiwen.com/subject/dplzahtx.html