美文网首页
equals和hashcode方法

equals和hashcode方法

作者: 紫色红色黑色 | 来源:发表于2019-12-04 23:51 被阅读0次

    描述

    equals和hashCode方法都是Object中的方法。本文解释equals()作用,hashCode()作用

    解释

    Object中equals()是比较两个对象的地址是否相等。hashCode()是本地方法,是以内存地址映射后生成的值。没有重写这两个方法,那在比较对象相等或者散列映射中都是用内存地址作为判断依据。但大量情况下我们要用的不是内存地址,而是对象内部数据。

    重写equals和hashCode后可以用对象内部数据作为判断依据。例如String类中,equals中会判断char[]中的数据是否相等,hashCode中会以char[]中数据来生成hashCode值。这样以来,只要char[]相等就生成相等的hashCode,equals也相等。

    HashMap中是以key的hashCode定位slot,定位到后再通过equals判断value是否存在。这样只要String中的char[]数据不变,则hashCode不变,equals结果不变。

    代码

    public static void main(String[] args) {
    
        HashMap<Object, Object> map = new HashMap<>(10);
    
        Bank b1 = new Bank("lucy");
        Bank b2 = new Bank("lucy");
        map.put(b1, "b1");
    
        System.out.println(b1.hashCode());//1831932724
        System.out.println(b2.hashCode());//1747585824
        System.out.println(map.get(b1));//b1
        System.out.println(map.get(b2));//null
    
    
        String l1 = new String("lucy");
        String l2 = new String("lucy");
        map.put(l1, "l1");
    
        System.out.println(l1.hashCode());//3333055
        System.out.println(l2.hashCode());//3333055
        System.out.println(map.get(l1));//l1
        System.out.println(map.get(l2));//l1
    }
    

    引用

    https://www.cnblogs.com/dolphin0520/p/3681042.html

    相关文章

      网友评论

          本文标题:equals和hashcode方法

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