JAVA重要知識點梳理(一)
阿新 • • 發佈:2019-02-14
(2)內部類還可以很好的實現隱藏(一般非內部類,是不允許有private與protected許可權的),但內部類可以。
21、equals, hashCode, ==
(1)== 用於判斷兩個物件是否為同一個物件或者兩基本型別的值是否相等;
(2)equals 用於判斷兩個物件內容是否相同;
(3)hashCode是一個物件的訊息摘要函式,一種壓縮對映,其一般與equals()方法同時重寫;若不重寫hashCode方法,預設使用Object類的hashCode方法,該方法是一個本地方法,由 Object 類定義的 hashCode 方法會針對不同的物件返回不同的整數。
21.1 equals與hashCode的區別
(1)一般來講,equals 這個方法是給使用者呼叫的,而 hashcode 方法一般使用者不會去呼叫;
(2)當一個物件型別作為集合物件的元素時,那麼這個物件應該擁有自己的equals()和hashCode()設計,而且要遵守前面所說的幾個原則。
21.2 在HashMap中使用可變物件作為Key帶來的問題
HashMap用Key的雜湊值來儲存和查詢鍵值對,如果HashMap Key的雜湊值在儲存鍵值對後發生改變,那麼Map可能再也查詢不到這個Entry了。也就是說,在HashMap中可變物件作為Key會造成資料丟失。因此,
(1)在HashMap中儘量使用不可變物件作為Key,比如,使用String、Integer等不可變型別用作Key是非常明智的或者使用自己定義的不可變類。
(2)如果可變物件在HashMap中被用作鍵,那就要小心在改變物件狀態的時候,不要改變它的雜湊值了,例如,可以只根據物件的標識屬性生成HashCode。