我想知道是否有人能详细解释一下
(int)(l ^ (l >>> 32));
在以下hashcode实现(由eclipse生成,但与Effective相同)中:
private int i;
private char c;
private boolean b;
private short s;
private long l;
private double d;
private float f;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + s;
result = prime * result + (b ? 1231 : 1237);
result = prime * result + c;
long t = Double.doubleToLongBits(d);
result = prime * result + (int) (t ^ (t >>> 32));
result = prime * result + Float.floatToIntBits(f);
result = prime * result + (int) (l ^ (l >>> 32));
return result;
}
谢谢!
发布于 2010-05-13 22:36:14
它取一个64位数字,将其一分为二,然后将两半进行异或运算(本质上)。
发布于 2010-05-13 22:36:40
它采用(64位) long
l
,将上半部分和下半部分(每个32位)异或到64位结果的下32位,然后使用(int)
强制转换只取下32位。
https://stackoverflow.com/questions/2827612
复制相似问题