String.hashcode()澄清

时间:2013-10-11 03:39:32

标签: java string hash hashcode

我正在查看String.hashcode()函数。 它被定义为:

此方法返回此字符串的哈希码。 String对象的哈希码计算如下:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

使用int算术,其中s[i]是字符串的第i个字符,n是字符串的长度,^表示取幂。 (空字符串的哈希值为零。)

这里的问题是s[0]是指第0个字符,或者更确切地说是字符串中的第n个字符。但是它是用于计算哈希码的那个字符的int值吗?

2 个答案:

答案 0 :(得分:2)

每个字符都有一个数值(ASCII / UTF-16 / etc ...)。这是在这个计算中使用 e.g。

char x = 'A';
System.out.println(x * 2); // output is 130

这是因为' A'是65

答案 1 :(得分:1)

最小类型的Java执行算术运算是int。因此s[0]*31^(n-1)转换为((int)s[0])*31^(n-1)