我已经覆盖了我的类的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?
答案 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
的哈希码。