学习:重写hashCode()方法的原则

摘自 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

posted @ 2012-04-24 16:40  荒土  阅读(376)  评论(0编辑  收藏  举报