zoukankan      html  css  js  c++  java
  • Java hashCode() 和 equals()

    第1部分 equals() 的作用

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

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

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

    既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相等。 但是,我们已经说过,使用默认的“equals()”方法,等价于“==”方法。因此,我们通常会重写equals()方法:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。  

    下面根据“类是否覆盖equals()方法”,将它分为2类。
    (01) 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==”去比较这两个对象。
    (02) 我们可以覆盖类的equals()方法,来让equals()通过其它方式比较两个对象是否相等。通常的做法是:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。

    第2部分 equals() 与 == 的区别是什么?

    == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不试同一个对象。

    equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况(前面第1部分已详细介绍过):
                     情况1,类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
                     情况2,类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。

    第3部分 hashCode() 的作用

    hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。

    若两个元素相等,它们的散列码一定相等;但反过来确不一定。在散列表中,

                               1、如果两个对象相等,那么它们的hashCode()值一定要相同;
                               2、如果两个对象hashCode()相等,它们并不一定相等。
                               注意:这是在散列表中的情况。在非散列表中一定如此!

  • 相关阅读:
    Ynoi 杂题选做
    CSP-S2021 浙江 游记
    P6272 [湖北省队互测2014]没有人的算术
    P5206 [WC2019]数树
    P5405 [CTS2019]氪金手游
    LOJ6679 Unknow
    LOJ3040 「JOISC 2019 Day4」合并
    P6122 [NEERC2016]Mole Tunnels
    三维凸包
    三,四元环计数
  • 原文地址:https://www.cnblogs.com/ggzhangxiaochao/p/9672819.html
Copyright © 2011-2022 走看看