标题: String类的HashCode方法问题 [打印本页] 作者: 宋旭东 时间: 2013-7-4 08:45 标题: String类的HashCode方法问题 public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;//字符数组表示字符串
int len = count;//字符串字符个数
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
上面是String类的HashCode() 方法的源码,问题是,当字符串无限长的时候,这个for循环计算得到hashCode不会越界么?作者: longlangcx 时间: 2013-7-4 12:18
字符串内部使用字符数组来存储字符串,字符数组角标是int,那么字符串长度应该就不会超过Integer.MAX_VALUE, 具体多少没研究过,看网上有人说是直接赋值是65534(存储在常量池的那种),存储在堆内存中的话我自己用字符串链接测试连接到长度2000000还可以运行,20000000就溢出了,提示java堆内存溢出,如图: