使用 hashCode() 测试字符串相等性
有什么理由不能使用它的hashCode方法测试Java字符串的相等性吗?所以基本上,而不是....
"hello".equals("hello")
您可以使用...
"hello".hashCode() == "hello".hashCode()
这将非常有用,因为一旦字符串计算了它的哈希码,那么比较字符串将与比较int一样有效,因为字符串缓存哈希码,并且如果您以这种方式设计它,则该字符串很可能无论如何都在字符串池中。
有什么理由不能使用它的hashCode方法测试Java字符串的相等性吗?所以基本上,而不是....
"hello".equals("hello")
您可以使用...
"hello".hashCode() == "hello".hashCode()
这将非常有用,因为一旦字符串计算了它的哈希码,那么比较字符串将与比较int一样有效,因为字符串缓存哈希码,并且如果您以这种方式设计它,则该字符串很可能无论如何都在字符串池中。
让我举一个反例。试试这个,
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
因为:如果对象相等,则两个对象的哈希码必须相等,但是,如果两个对象不相等,则哈希码仍然可以相等。
(评论后修改)