日期:2014-05-20  浏览次数:20842 次

请教大家关于String的 hashCode() 问题?
根据Java API 中 String 的hashCode()方法定义如下:
public int hashCode()
Returns a hash code for this string. The hash code for a String object is computed as 
 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]


如果按照s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 这样的函数来计算的话,那计算结果是很大的,不是要溢出的吗? 有时得出的是负数,那么它存在内存的什么地址呢?

------解决方案--------------------
结果是可能很大,也会溢出的。得到的负数应该就是那些溢出的值吧。
------解决方案--------------------
hashCode()默认返回的是内存地址,实际很多类都改写了这个方法,如String类
hashCode()是在存放hashMap等时用的生成hash的值,
一般没什么用处,只有在你这样用时,才须考虑hashCode()
如:
有一个自己的类Class A
HashMap map = new HashMap();
A temp = new A("a");
map=pub(temp, "1");
你要根据A("a")在map中查"1"时,就必须改写hashCode
主A("a")的hashCode相等,且此时temp.equals(new A("a));