源码:
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.File;public class StringHashConv {

    static public int hashCode(String str)
    {
        int hash = 0;
        char[] val = str.toCharArray();
        
        int len = val.length;
        for (int i = 0; i < len; i++)
        {
  
         hash = 31 * hash + val[i];
            
        }
        if (hash < 0)
        {
            hash *= -1;
        }
        return hash;
    }
    
    public static void main(String[] args) throws Exception
    {
     String data = "山东万声通讯兰州分公司";
     int j = hashCode(data);
     System.out.println(j);
     int i = j % 6;
     System.out.println(i);
    }
}运行后结果:1738489253
5我想问一下,int型的数值范围不是在-32768~+32767之间的吗,为什么结果会有1738489253这么大的数值啊??
还有哦,就是有1738489253,那么1738489253 % 6 是取模运算吧,怎么得5出来的,不是得8的吗??劳请各位大哥指教一下。

解决方案 »

  1.   

    int的取值范围:-2^31~2^31,你算一下吧。1738489253 % 6 是取模先不说值等于多少吧,至少不会比6大(肯定不会是8啦),这里也不可能是偶数,对不。因为1738489253是个奇数,具体值是多少我就难得算了。
      

  2.   

    int 是 -2G~2G-1,大约-21亿到21亿+
      

  3.   

    -32768~+32767是因为int类型长度为16位(如C/C++中),而java是4个字节32位的, 范围: -2147483648~2147483647。你看超过了没?取模运算的结果的绝对值肯定是比模数要小的,所以不可能是8.
      

  4.   

    还是不明白,JAVA书上不是说了INT类型范围在-32768~+32767之间的哦,怎么又会有16位和32位之分的。
      

  5.   

    public static void main(String args[]) {
    System.out.println(Integer.MIN_VALUE);
    System.out.println(Integer.MAX_VALUE);
    }
    自己运行看看吧