== , equals,hashCode

在java中:

  • == 是運算符,用于比較兩個變量是否相等。

  • equals 是Objec類的方法,用于比較兩個對象是否相等,默認Object類的equals方法是比較兩個對象的地址,跟==的結果一樣。Object的equals方法如下:

    public boolean equals(Object obj) { 
      return (this == obj); 
    }
    
  • hashCode 也是Object類的一個方法。返回一個離散的int型整數(shù)。在集合類操作中使用,為了提高查詢速度。(如HashMap,HashSet等)

下面我們分別再介紹:

==


Java中的數(shù)據(jù)類型分為兩類:

  1. 基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型。
  • byte,short,char,int,long,float,double,boolean 一共八種。他們之間的比較,應用雙等號(==),比較的是他們的。
  1. 復合數(shù)據(jù)類型(類)。
  • 當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址。所以,除非是同一個new出來的對象,他們的比較后的結果為true,否則比較后結果都是false。

equals()


JAVA當中所有的類都是繼承于Object這個基類的,在Object中的基類中定義了一個equals的方法,這個方法的初始行為是比較對象的內存地址,但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現(xiàn),而不再是比較類在堆內存中的存放地址了,而是比較他們的。

//String的equals()源碼
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true; 
     }//重寫了Object的equals方法,判斷字符串內容 
    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; 
}

對于復合數(shù)據(jù)類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基于他們在內存中的存放位置的地址值的,因為Object的equals方法也是用雙等號(==)進行比較的,所以比較后的結果跟雙等號(==)的結果相同。

hashCode()


如果兩個對象根據(jù)equals()方法比較是相等的,那么調用這兩個對象中任意一個對象的hashCode方法都一定產(chǎn)生同樣的整數(shù)結果。如果兩個對象根據(jù)equals()方法比較是不相等的,那么調用這兩個對象中任意一個對象的hashCode方法,則不一定要產(chǎn)生相同的整數(shù)結果。

從而在集合操作的時候有如下規(guī)則:
將對象放入到集合中時,首先判斷要放入對象的hashcode值與集合中的任意一個元素的hashcode值是否相等,如果不相等直接將該對象放入集合中。 如果hashcode值相等,然后再通過equals方法判斷要放入對象與集合中的任意一個對象是否相等,如果equals判斷不相等,直接將該元素放入到集合中,否則不放入。

希望可以幫到你~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,796評論 11 349
  • Java集合框架 Java平臺提供了一個全新的集合框架。“集合框架”主要由一組用來操作對象的接口組成。不同接口描述...
    小石38閱讀 450評論 0 0
  • 春風未暖,山花含苞 而她們 旺山之巔的精靈 中隱碧螺春 已是 一株株 一簇簇 一片片 迎著春天的曙光 歡快的吐著新...
    香言子閱讀 500評論 0 0
  • 立 春,陽光不明媚。 我穿著寬大的風衣,穿過一個未曾有過一面之緣的叫賽珍珠命名的古亭,看著波紋凜凜的水面,和...
    姜枝兒閱讀 825評論 3 1

友情鏈接更多精彩內容