【发布时间】:2018-03-11 18:41:56
【问题描述】:
两个 String 对象的哈希值的合并是否应该与它们连接的哈希值相同?我正在使用 XOR ^ 运算符(如 here 建议的那样)并得到了不同的结果。
我做错了什么?
String a = "A";
String b = "B";
String ab = a+b;
int i = a.hashCode() ^ b.hashCode();
System.out.println(
a.hashCode()+"\n"+
b.hashCode()+"\n"+
ab.hashCode()+"\n"
i);
【问题讨论】:
-
没有。为什么你会期望它们是一样的?你检查过
String.hashCode()的文档吗? -
“我做错了什么?” 你的想法,就是你做错了什么。为什么你会认为异或哈希是一样的。
String可以以任何它想要的方式创建散列。如果它想(它不会,太慢),它可以通过加密函数发送文本。但就你而言,它也可能有。您永远不应该期望特定文本有任何特定的哈希值。新版本的 Java 甚至可能会改变所使用的算法。 -
@Andreas 不是。该算法在文档中。现在无法更改。
-
@shmosel 从技术上讲,没有什么能阻止新的 Java SE 版本 JSR 或 JEP 更改算法。
-
@MarkRotteveel 从技术上讲,没有什么能阻止下一个 JLS 交换
true和false的含义。