在Effective Java中,有一个Complex类的示例。该类已覆盖使用hashDouble方法的hashCode,我对此有疑问。
private int hashDouble(double val)
{
long longBits = Double.doubleToLongBits(re);
return (int) (longBits ^ (longBits >>> 32));
}
(int) (longBits ^ (longBits >>> 32))
出于什么目的? 最佳答案
double值是64位宽,但是hash方法返回的int只有32位。
为了更好地分布哈希值(与简单地剥离高32位相比)。
该代码使用XOR合并通过计算中IEEE 754值的右移对齐的高32位(包含符号,指数和尾数的某些位)。
图片来源Wikipedia