摘自 Effective Java
1、把某个非零常数值,如17,保存在一个叫result的int类型变量中。
2、对于对象中每一个相关域f,完成以下步骤:
a.为该域计算int类型的散列码c:
i.如果该域是boolean类型,则计算(f?0:1)。
ii.byte\char\short\int类型,计算(int)f。
iii.long类型,计算(int)(f^(f>>>32))。
iv.float类型,计算Float.floatToIntBits(f)。
v.double类型,计算Double.doubleToLongBits(f)获得一个long类型,再按long计算。
vi.如果是一个对象引用,迭代计算hashCode(),如果为null,取0。
vii.如果是一个数组,则把每一个元素当做单独域来处理。
b.使用下面公式:
result=37*result+c