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

相关文章:

  • 2022-12-23
  • 2021-12-31
  • 2021-07-27
  • 2021-10-02
  • 2021-09-08
  • 2022-01-23
猜你喜欢
  • 2021-11-15
  • 2021-11-16
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2021-07-25
  • 2021-09-02
相关资源
相似解决方案