zoukankan      html  css  js  c++  java
  • java中equals(),== 和 hashCode的相关内容

    首先说一下== 它的作用就是判断两个对象的地址是不是相等的,判断是不是同一个对象。

    然后,equals()  它的作用就是判断两个对象是否相等。

     以一下是源码,如果是object类型的对象 就会判断对象的地址是否相等,是否是同一个对象,是在Object类中的方法,等价于==

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

    一般情况来说 我们都会对equals方法进行重写,如果没有重写,对比的是内存地址,重写了,对比的是内容。

    对比一下equals() 和==的区别:1  ==是判断对象的内存地址是否一致,从而判断是不是一个对象,而equals()分两种情况,第一种,在没有重写的情况下和==一样。第二种情况重写了方法,对比的就是内容是否相等。一下为String.java中的 源码,看到,如果数据类型是String类型,那么就判断是内容是否一致。

     public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String) anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                                return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }

    第三个 hashCode()

    它的作用就是获取哈希码值,哈希码的作用就是在哈希表中确定索引位置。也是object类中的方法。虽然在object类中,每个对象都包含这个方法,但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。

    上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置

    推荐阅读:Java hashCode() 和 equals()的若干问题解答

  • 相关阅读:
    HackerRank
    HackerRank
    LeetCode "Kth Smallest Element in a BST"
    HackerRank
    HackerRank
    LeetCode "Roman to Integer"
    LeetCode "Integer to Roman"
    LeetCode "Majority Element II"
    HackerRank
    HackerRank
  • 原文地址:https://www.cnblogs.com/xiaosisong/p/10837006.html
Copyright © 2011-2022 走看看