重寫equal方法

2021-09-12 15:32:28 字數 1525 閱讀 1201

**:

1.equals()方法和hashcode()方法兩者關係——hashcode方法設計原則

1) 如果兩個物件相同(即用equals比較返回true),那麼它們的hashcode值一定要相同;

2) 如果兩個物件不同(即用equals比較返回false),那麼它們的hashcode值可能相同也可能不同;

3) 如果兩個物件的hashcode相同(存在雜湊衝突),那麼它們可能相同也可能不同(即equals比較可能是false也可能是true) 

4) 如果兩個物件的hashcode不同,那麼他們肯定不同(即用equals比較返回false)

hashcode() 返回雜湊值,而 equals() 是用來判斷兩個物件是否等價。等價的兩個物件雜湊值一定相同,但是雜湊值相同的兩個物件不一定等價。

2.重寫equals()方法——偽**

1)自反性:a.equals(a)要返回true

2)對稱性:如果a.equals(b)返回true,那麼b.equals(a)也要返回true

3)傳遞性:如果a.equals(b)返回true,b.equals(c)為true, 則a.equals(c)也要為true. 說白了就是 a = b , b = c , 那麼a = c.

4)一致性:只要a,b物件的狀態沒有改變,a.equals(b)必須始終返回true.

5)a.equals(null) 要返回false.

在覆蓋 equals() 方法時應當總是覆蓋 hashcode() 方法,保證等價的兩個物件雜湊值也相等。

3.重寫equals()方法——具體步驟分為兩步,先重寫equals()方法,後重寫hashcode()方法

重寫equals()方法

示例類class coder

if (anobject instanceof string)

return true;

} }

return false;

}很明顯,這是進行的內容比較,而已經不再是位址的比較。依次類推math、integer、double等這些類都是重寫了equals()方法的,從而進行的是內容的比較。當然,基本型別是進行值的比較。

它的性質有:

對於object類來說,equals()方法在物件上實現的是差別可能性最大的等價關係,即,對於任意非null的引用值xy,當且僅當xy引用的是同乙個物件,該方法才會返回true

需要注意的是當equals()方法被override時,hashcode()也要被override。按照一般hashcode()方法的實現來說,相等的物件,它們的hash code一定相等。

hashcode()方法給物件返回乙個hash code值。這個方法被用於hash tables,例如hashmap。

它的性質是:

對比C 中 與equal方法

c 中equal與 的區別 收藏 對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩...

HashCode和equal方法的區別和聯絡

hashcode 和 equal方法過載 1 為什麼要過載equal方法?答案 因為object的equal方法預設是兩個物件的引用的比較,意思就是指向同一記憶體,位址則相等,否則不相等 如果你現在需要利用物件裡面的值來判斷是否相等,則過載equal方法。2 為什麼過載hashcode方法?答案 一...

方法過載,方法重寫

方法過載 前提 必須在同一類中!才能過載 特點 這幾個方法要在乙個類中 這幾個方法名字要一樣 這幾個方法引數項不同 引數型別不同 主要就是 引數列表不能相同 順序可以不同 方法的重寫 前提是繼承關係 訪問修飾符要比繼承之前的大,返回值型別相同,方法名相同,引數列表相同,但方法體不同,稱為方法的重寫 ...