0

我在看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 值吗?

4

2 回答 2

2

每个字符都有一个数值(ASCII/UTF-16/等...)。这是在这个计算中使用的,例如

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

那是因为'A'的数值是65

于 2013-10-11T03:45:32.480 回答
1

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

于 2013-10-11T04:21:26.193 回答