Java基礎 Object類回顧------" == " 、equals()、hashCode() 之間的關係

在 Java 中 Object 類是所有類的父類,任何類都會默認繼承 Object 類。

1. " == "

它的作用是判斷兩個對象的內存地址是否相等。如果地址相同則判爲同一個對象。

1.1. 對於基本數據類型類型

基本數據類型 == 比較的是

1.2. 對於引用數據類型

引用數據類型 == 比較的是內存地址

 

2. equals()

2.1. 未重寫

equals() 在 Object 類中的默認實現方法是調用 " == ",此時等價於使用 " == " 判斷。

2.2. 重寫了

但通常會重寫這一個方法使之比較對象的內容是否相等,如 String 中就重寫了 equals()方法,使之比較的是內容是否相同。

 

3. hashCode()

hashCode() 是一個native方法,用於獲取對象的哈希碼的,它返回的是一個int型整數。

hashCode() 保證在一次執行中同一個對象hashCode()是一樣的

hashCode() 的哈希碼主要作用是給散列表快速確定索引的,通過哈希碼先判斷對象是否有可能相同(因爲相同的對象哈希碼也一定相同),再去用 equals() 做進一步的比較,這樣可以大大減少使用 equals()比較的次數

所以說如果兩個對象相等,則其hashCode()的值也會相等。但由於 hashCode() 是根據內存地址生成的值,所以對於同一個類生成的兩個對象,即使它們裏面的值一樣,但其哈希值是不會相等的,因此當我們重寫 equals() 方法時最好也要重寫 hashCode() 方法,這樣才能保證相同內容的類對象 hashCode() 相等。

可以看到 String 類中就重寫了 hashCode() 方法,通過一個特定的算法來確定其哈希碼。

這樣當我們將 String 作爲 Key 存入哈希表時纔可以準確定位到相同類對象的位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章