05.16 Java高級編程——覆蓋equals時最容易被忽略的問題

在基本運算符中, == 扮演一個重要的角色,


而跟它相似的還有個 equals()方法,這兩個的區別是什麼你知道麼。


更多編程知識請 關注我, 歡迎點贊 歡迎評論


“equals“在編程語言中都是必不可少的,那麼在Java語言中我們應該如何謹慎的實現呢?如何做到沒有問題呢?

在編程過程中,我們經常遇到對兩個對象進行對比,那麼一開始最早我們是使用== 進行對比,原因很簡單,一開始我們只需要對基本類型的數據進行對比。然後,隨著需求和我們知識的拓展,我們的對比的對象就不是那麼簡單了,逐漸到了string 然後再到比較複雜的其他自定義對象。


於是我們出現了一個需求,手寫equals 方法。

equals方法來自於Object類:

Java高級編程——覆蓋equals時最容易被忽略的問題

可以看到在Object類中equals比較的兩個實例是否是引用相等的,這個代碼告訴我們對比的時候我們只需要考慮了這個對象是否就是它自己,可是如果我們要實現一個“值是否相等”的equals方法呢?。何時需要重寫equals方法呢?頂級類只提供了引用是否相等,如果你需要自己實現一個邏輯是否相等,此時則需要重寫equals方法,例如String類。

Java高級編程——覆蓋equals時最容易被忽略的問題

當在重寫equals方法時,應該遵守以下約定:

Java高級編程——覆蓋equals時最容易被忽略的問題

Java高級編程——覆蓋equals時最容易被忽略的問題

那麼我們來分析一下源碼String中的equals方法:

Java高級編程——覆蓋equals時最容易被忽略的問題

String中equals方法的實現實際上就是書中給我們的重寫equals的一些訣竅:

Java高級編程——覆蓋equals時最容易被忽略的問題

Java高級編程——覆蓋equals時最容易被忽略的問題


分享到:


相關文章: