官方给出解释如下:
Returns a hash code for this string. The hash code for a String
object is computed as
usings[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
int
arithmetic, where
s[i]
is the
i
th character of the string,
n
is the length of the string, and
^
indicates exponentiation. (The hash value of the empty string is zero.)
返回一个字符串的hash值,对字符串中的每一位字符按照以上公式进行计算,计算结果形成一个int类型的数字返回。其中S[0]是该字符串所对应的十进制数字,如“a”为49,“b”为50。
s[0]*31^(n-1)//其中n为该字符串的长度,31^(n-1)是31为底,n-1为指数的幂。
测试如下:
public static void main(String[] args) throws IOException
{
String t = "1";
System.out.println(t.hashCode());
}
public static void main(String[] args) throws IOException
{
String t = "2";
System.out.println(t.hashCode());
}
public static void main(String[] args) throws IOException
{
String t = "12";
System.out.println(t.hashCode());
}
三个函数返回的值分别为49,50,1569。恰好等于该公式所求出的值。
String.hashcode() & Integer.MAX_VALUE两者取与,使得转换后的数字能够在Integer数范围以内,防止越界。