Java String.hashcode()说明

Java String.hashcode()说明,java,string,hash,hashcode,Java,String,Hash,Hashcode,我正在查看String.hashcode()函数。 它的定义是: 此方法返回此字符串的哈希代码。字符串对象的哈希代码计算如下: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 使用int算术,其中s[i]是字符串的第i个字符,n是字符串的长度,^表示求幂。(空字符串的哈希值为零。) 这里的问题是s[0]指的是字符串中的第0个字符,或者更确切地说是第n个字符。但用于计算哈希代码的是该字符的int值吗?每个字符都有一个数值(ASCII/UTF-16/等)。

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

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

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int算术,其中
s[i]
是字符串的第i个字符,n是字符串的长度,^表示求幂。(空字符串的哈希值为零。)


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

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


这是因为“A”的数值是65,每个字符都有一个数值(ASCII/UTF-16/等)。这是在计算中使用的 e、 g


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

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

实际上,它不是ASCII,而是Unicode字符的UTF-16编码。实际上,它不是ASCII,但是Unicode字符的UTF-16编码。
用于计算哈希代码的是该字符的int值吗?
答案是肯定的。
用于计算哈希代码的是该字符的int值吗?
答案是肯定的。
char x = 'A';
System.out.println(x * 2); // output is 130