1、
把某個非零常數值,比如17,儲存在乙個叫result的int型別的變數中。
2、對於物件中的關鍵域f(指equals方法中考慮的每乙個域),完成以下步驟:
a、為該域計算int型別的雜湊碼c: i、
如果該域是boolean型別,則計算(f ? 0 : 1)。
ii、如果該域是byte、char、short或者int型別,則計算(int)f。
iii、
如果該域是long型別,則計算(int)(f ^ f ( f >> 32 ) )。
iv、如果該域是float型別,則計算float.floattoinitbits( f )。
v、如果該域是double型別,則計算double.doubletolongbits( f )得到乙個long型別的值,再執行步驟iii。
vi、如果該域是乙個物件引用,並且該類的equals方法通過遞迴呼叫equals的方式來比較這個域,則同樣對這個遞迴呼叫hashcode。如果要求乙個更為複雜的比較,則為這個域計算乙個規範表示,然後針對這個正規化表示呼叫hashcode。如果這個域為null,則返回0或者其他常數。
vii、
如果該域是乙個陣列,則把每個元素當作單獨的域來處理。也就是說,遞迴地應用上述規則,對每個重要的元素計算乙個雜湊碼,然後根據步驟b中的做法把這些雜湊碼組合起來。
b、按照下面的公式,把上面步驟的c組合到result中:
result = 17 * result + c;
3、返回result。
4、寫完後測試是否相等的例項具有相同的雜湊碼。
apache commons lang
裡面有封裝
org.apache.commons.lang.builder.hashcodebuilder
public class person
}
java中hashcode的理解
hashcode 是幹什麼用的?2008年09月29日 星期一 07 32 p.m.首先hashcode是雜湊演算法的一中簡單實現,他是乙個物件的雜湊嗎值。一般和equals一起使用。hashcode也是用來查詢的,如果你學過資料結構就應該知道,在查詢和排序這一章有 例如記憶體中有這樣的位置 0 1...
Java中的hashcode方法
參考與學習 旨在通過這篇文章把現在我明白的 未來我可能忘記的以及混淆的,寫清楚。hashcode方法 該方法定義在object類中,是native方法 哦我去 其他囉嗦的我不想寫了 不懂直接去看上面兩篇部落格 果然!點一 equals與 的關係和區別 object類中定義的equals方法,就是使用...
java學習 hashCode的計算
一 常見型別的幾個案例 class people public class test 列印輸出結果 10 65 553310500 48690 people 7852e922 2018699554二 分析 1 integer型別的資料,返回的hash值為資料本身 2 物件型別的資料,返回的一串字元 ...