根据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] 这样的函数来计算的话,那计算结果是很大的,不是要溢出的吗? 有时得出的是负数,那么它存在内存的什么地址呢?

解决方案 »

  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));
      

  2.   

    在C语言里一般先定义一个数组, 再根据元素的值生成一个hash码,然后把这个元素放到数组中对应hash码的位置去.我就不明白JAVA中的hashCode()如何用了. String.hashCode()可能返回一个负数,那怎么使用呢?