我正在尝试手动进行字符串的哈希码计算,因为它将字符串哈希码的公式称为" s[0]*31^(n-1( + s[1]*31^(n-2( + ... + s[n-1]",如下所示
public static void main(String[] args) {
String str1 = new String("A");
double hc = 0;
for (int i = 0; i < str1.length(); i++) {
int iv = (byte) str1.charAt(i);
hc = hc + Math.pow((iv * 31), (str1.length() - 1 - i));
}
System.out.println(hc); // 1.0
System.out.println(str1.hashCode()); // 65
}
"hc"的值为 1.0,因为 java 根据规则将字节转换为 int 值。 但我正在寻找的答案是65。 如何将字节值原封不动地复制到 int 变量。
所以从远处看你在功能上犯了错误,我的意思是:
Math.pow((iv * 31), (str1.length() - 1 - i))
等于 => (65 * 31(^(1[长度] - 1 - 0[i 值](
什么给出类似 (65*31( ^ 0 什么给出 1 但你正在寻找表达式 65 * (31 ^ 0( [结论] 所以函数应该看起来像
Math.pow((31), (str1.length() - 1 - i)) * iv
我猜会给什么 65