使用 hashCode() 测试字符串相等性

2022-09-01 21:29:09

有什么理由不能使用它的hashCode方法测试Java字符串的相等性吗?所以基本上,而不是....

"hello".equals("hello")

您可以使用...

"hello".hashCode() == "hello".hashCode()

这将非常有用,因为一旦字符串计算了它的哈希码,那么比较字符串将与比较int一样有效,因为字符串缓存哈希码,并且如果您以这种方式设计它,则该字符串很可能无论如何都在字符串池中。


答案 1

让我举一个反例。试试这个,

public static void main(String[] args) {
    String str1 = "0-42L";
    String str2 = "0-43-";

    System.out.println("String equality: " + str1.equals(str2));
    System.out.println("HashCode eqauality: " + (str1.hashCode() == str2.hashCode()));
}

我的Java上的结果,

String equality: false
HashCode eqauality: true

答案 2

因为:如果对象相等,则两个对象的哈希码必须相等,但是,如果两个对象不相等,则哈希码仍然可以相等。

(评论后修改)