字符串的
哈希码
计算如下:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用
int算术,其中字符串
s[i]的
i第-个字符,字符串
n的长度,并
^表示 幂 。(空字符串的哈希值为零。)
因此,根据
Java语言规范15.8.2
,此整数计算的溢出很容易发生,结果为负数:
如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。

字符串的
哈希码
计算如下:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用
int算术,其中字符串
s[i]的
i第-个字符,字符串
n的长度,并
^表示 幂 。(空字符串的哈希值为零。)
因此,根据
Java语言规范15.8.2
,此整数计算的溢出很容易发生,结果为负数:
如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。