【发布时间】:2015-01-14 16:16:57
【问题描述】:
"random".hashCode() 返回值 -938285885。 hashCode() 是否应为负值?
根据下面的问题,有一种方法可以计算字符串的hashCode(),但是使用它,值不会随着字符串长度的增加而不断增加并最终大于Integer.MAX_VALUE吗?
【问题讨论】:
-
为什么你认为它不应该/不能返回负值?解释你的期望。
-
任何 int 都不能大于
Integer.MAX_VALUE。这就是“最大值”的意思。当 int 计算的数值结果大于 Integer.MAX_VALUE 时,会发生算术溢出。 (去谷歌上查询)。有时溢出是一件坏事,但在计算哈希码时,它只是计算的正常部分。 -
"random".hashCode()与(((('r'*31+'a')*31+'n')*31+'d')*31+'o')*31+'m'相同。"rando"的hashCode为正数,但第五次乘以 31 会导致溢出,因此结果为负数。