我正在查看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值吗?
答案 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)