HashCode计算来自double

时间:2015-03-03 10:41:02

标签: java double override long-integer hashcode

Effective Java中有一个Complex类的例子。该类已覆盖hashCode,它使用hashDouble方法我有一个问题。

private int hashDouble(double val) 
{
    long longBits = Double.doubleToLongBits(re);
    return (int) (longBits ^ (longBits >>> 32));
}

出于什么目的(int) (longBits ^ (longBits >>> 32))

1 个答案:

答案 0 :(得分:4)

double值是64位宽,但hash方法返回的int只有32位。 为了更好地分配哈希值(与简单地去除高32位相比)。

代码使用XOR来合并通过计算中IEEE 754值的右移来对齐的高32位(包含符号,指数和尾数的一些位)。

enter image description here

图像源维基百科