对象的哈希值就是一个普通的十进制数组,源于父类Object
hashCode() ;
源码:public native int hashCode();
如果没有重写父类,每次运行的结果都是不同整数,称为哈希值,没有特别意义;
但是如果子类重写父类方法,哈希值就会是自定义的哈希值;
public static void fun() {
String s1 = new String(“abc”);
String s2 = new String(“abc”);
System.out.println(s1.hashCode()==s2.hashCode());
}
两个String时,hashCode值是相同的;
“abc”String数组Value[3];
值是96354
此时源码中计算hash值:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
hash默认为0 ;
h=31*0 + val[i] 第一次循环时i=0 也就是 a 也就是ASCII码97;,第一次循环结果97;
第二次循环
h=31*97 + 98,第二次循环结果3105;
第三次循环:
h=31*3105+99,第三次结果是96354 ;