首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >高效Java hashCode()实现中的位移位

高效Java hashCode()实现中的位移位
EN

Stack Overflow用户
提问于 2010-05-13 22:32:55
回答 2查看 9.4K关注 0票数 21

我想知道是否有人能详细解释一下

(int)(l ^ (l >>> 32));

在以下hashcode实现(由eclipse生成,但与Effective相同)中:

代码语言:javascript
复制
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;
}

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2010-05-13 22:36:14

它取一个64位数字,将其一分为二,然后将两半进行异或运算(本质上)。

票数 8
EN

Stack Overflow用户

发布于 2010-05-13 22:36:40

它采用(64位) long l,将上半部分和下半部分(每个32位)异或到64位结果的下32位,然后使用(int)强制转换只取下32位。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2827612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档