hash值(hashcode)可以理解為唯一編碼、摘要值等,具體實作可能是記憶體位址,在java中可用於識別兩個變數是否其實是同個物件。同個物件則此刻的值必定相等,但不同物件也可以是數值相等。下面一起來詳細了解一下吧。
hash值(hashcode)在不同類別中:
1、Object類別的hashCode:傳回物件的記憶體位址經過處理後的結構,由於每個物件的記憶體位址都不一樣,所以哈希碼也不一樣。
兩個物件要完全相對必須哈希值一樣。比較用equal()
PS1:任何類別均為Object類別的間接子類,所以均繼承方法public int hashCode(),該方法傳回的值一般是透過將該物件的內部位址轉換成一個整數來實現的。這樣能確保每個物件的雜湊碼值不一樣
PS2:這裡的位址是指JVM虛擬出來的記憶體位址,不是實際實體記憶體位址。
PS3:雜湊值和位址值是不一樣的,雜湊值是透過雜湊演算法雜湊得來的,而位址值是透過是和物理層面有關,是系統分配的,是不存在相同的,而雜湊值是可以透過強製手段設定為相同的,也就是說雜湊值是一種邏輯上的確保唯一性,而位址值就是物理上確保唯一性。
2、String類別的hashCode:根據String類別包含的字串的內容,根據一種特殊演算法傳回哈希碼,只要字串內容相同,傳回的雜湊碼也相同。
比較字串內容相等。用equal()
3、Integer類別的hashCode:傳回的雜湊碼就是Integer物件裡所包含的那個整數的數值。
例如,Integer i1=new Integer(100),i1.hashCode的值就是100 。
由此可見,2個一樣大小的Integer對象,回傳的雜湊碼也一樣。
比較包裝數值類型相等。用equal()
以上是java的hash值是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!