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

10-04 18:54