在Java中覆盖hashCode-method:为什么它可以工作?

时间:2014-03-14 10:06:21

标签: java override primes hashcode

我已经覆盖了我的类的hashcode方法(一个名为“id”的实例变量)。

public int hashCode()
{
  final int prime = 31;
  int result = 1;

  result = prime * result + ((id == null) ? 0 : id.hashCode());
  return result;
}

最后一行究竟发生了什么?应该有两种不同的情况:

案例1:id == null,这意味着结果应该等于31。

案例2:id!= null,表示结果应该等于31 + id.hashCode();

我不明白这两种情况(或者我甚至不确定它们是否正确)。无论如何,素数的重点是什么?我们为什么要将空引用分配给31?

1 个答案:

答案 0 :(得分:1)

  

素数的重点是什么?   31是ODD-PRIME数,​​并且选择奇数可以防止乘法溢出,而素数是传统方法。

我认为从here

可以更详细地理解这一部分
  

我们为什么要将空引用分配给31

((id == null) ? 0 : id.hashCode()) 这里我们检查id是否具有非null值。如果存在一些非空值,那么它必须具有一些哈希码,并且我们在对象的哈希码中添加该哈希码。 所以这就是two object will differ if id for those two object differs的哈希码。