Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在看String.hashcode()功能。它定义为:
String.hashcode()
此方法返回此字符串的哈希码。String 对象的哈希码计算如下:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int算术,其中s[i]是字符串的第i个字符,n是字符串的长度,^表示取幂。(空字符串的哈希值为零。)
s[i]
这里的问题是s[0]指字符串中的第 0 个字符或者更确切地说是第 n 个字符。但它是用于计算哈希码的那个字符的 int 值吗?
s[0]
每个字符都有一个数值(ASCII/UTF-16/等...)。这是在这个计算中使用的,例如
char x = 'A'; System.out.println(x * 2); // output is 130
那是因为'A'的数值是65
Java 执行算术运算的最小类型是 int。所以s[0]*31^(n-1)转换为((int)s[0])*31^(n-1)
s[0]*31^(n-1)
((int)s[0])*31^(n-1)