• 高强度学习训练第十二天总结:Java hashCode和equals的关系


    今天要收拾东西。草草的总结下。。

    1.如果两个对象相等,则hashcode一定也是相同的
    2.两个对象相等,对两个对象分别调用equals方法都返回true
    3.两个对象有相同的hashcode值,它们也不一定是相等的
    4.因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖
    5.hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

    equals的作用

    equals()的作用是用来判断俩个对象是否相等

    equals()定义在JDK的Object.java中。通过判断俩个对象的地址是否相等(即,是否是同一对象)来区分它们是否相等。
    源码如下:

    public boolean equals(Object obj){
        return (this == obj)
    }
    

    hashCode() 的作用

    hashCode() 的作用是获取哈希码,也称散列码;它实际上是返回一个int整数。
    这个哈希码的作用是确定该对象在哈希表的索引位置
    hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。
    虽然,每个Java类都包含hashCode() 函数。但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

    == 与 equals

    == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。

    equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

    情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
    情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# 播放器控件的常用方法
    在 C# 中使用文件名启动应用程序
    备份和恢复Android手机的NAND分区
    刷Recovery的方法
    WPF RadioButton的探究,为啥选中一个其他都自动不选中了呢?
    WPF大牛Josh Smith 转投 iOS 的怀抱
    终端服务的剪贴板的缺陷,导致WPF调用Clipboard.SetText() 失败
    用df命令查看分区情况
    WPF与输入法冲突研究之二:TextInput事件的BUG?
  • 原文地址:https://www.cnblogs.com/godoforange/p/11593381.html
Copyright © 2020-2023  润新知