看下该方法:
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
返回的是(h = key.hashCode()) ^ (h >>> 16)的值,也就是hashcode和无符号右移16位的hashcode后得到的值做异或运算
h = key.hashCode()的时候已经把hashcode的值赋值给h了
我就拿当key等于String类型时举例
String de hashcode改写过了,因此和object的不同。
看代码:
String test = "my name is suser";
int hashcode = test.hashCode(); // 十进制值为284986057
转换成二进制为:
10000111111001000101011001001
总位数为29位,不方便测试高低16位,我们在前加0变为32位:
00010000111111001000101011001001
然后看下h >>> 16