1. 程式人生 > >JAVA重要知識點梳理(一)

JAVA重要知識點梳理(一)

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。