String类的hashcode计算
程序员文章站
2024-03-22 17:37:28
...
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;
}
源码如上。
关于为什么取31为权
主要是因为31是一个奇质数,所以31*i=32*i-i=(i<<5)-i,这种位移与减法结合的计算相比一般的运算快很多。
比如:
String ss = "abc";
String ss1 = new String("abc");
String ss2 = "abc";
System.out.println(ss.equals(ss1));//true
System.out.println(ss.equals(ss2));//true
System.out.println(ss == ss1);//false
hashcode值一样,对象不一定一样
对象一样,hashcode值一样
上一篇: JAVA字符串去空格 回车
下一篇: String的hashcode方法
推荐阅读
-
String类的常用方法
-
String的hashcode方法
-
String类的hashcode计算
-
Object:所有类的超类--equals() & hashCode()、== 和 equals.() 两者均可用于比较两个对象是否相等
-
Java重写类的HashCode
-
关于Java中String类的相关方法
-
C++中虚函数继承类的内存占用大小计算
-
利用String类或StringBuffer类的方法,对输入的Email地址进行有效性验证。
-
String与实体类bean之间的转换
-
一个抽象类Shape 里边有两个抽象方法 计算面积 和 周长; Shape由三角形和圆形继承,利用多态的特性设计完成不同子类的功能