gpt4 book ai didi

java - 即使两个字符串 s1 和 s3 具有相同的哈希码,== 如何返回 false?

转载 作者:行者123 更新时间:2023-11-30 02:44:53 24 4
gpt4 key购买 nike

public static void main(String[] args) {
String str1 = "java";
String str2 = str1.intern();
String str3 = new String(str1.intern());
System.out.println("hash1=" + str1.hashCode());
System.out.println("hash2=" + str2.hashCode());
System.out.println("hash3=" + str3.hashCode());
System.out.println("str1==str2==>>" + (str1 == str2));
System.out.println("str1==str3==>>" + (str1 == str3));
}

==============================================输出== =>
hash1=3254818
hash2=3254818
hash3=3254818
str1==str2==>>true
str1==str3==>>

====================================

任何人都可以解释即使s1s3具有相同哈希码,==如何返回false吗?

最佳答案

尽管有上面的评论,我怀疑您已经了解 == 确定两个引用是否指向同一个对象(或均为空),并且您应该使用 equals( ) 如果您想比较两个字符串的数据相等性。

相反,我认为您缺少的是 hashCode() 方法在这方面对应于 equals() 方法;它基于对象中的数据,事实上,它指定类应始终以这样的方式实现 hashCode():如果 a.equals(b),然后a.hashCode() == b.hashCode()。 (当然,语言中没有任何内容强制执行此操作。)您正在寻找的 == 的类似物是 the System.identityHashCode() method .

但是,即使如此,也应该注意 System.identityHashCode() 并不能保证不同的实例将具有不同的身份哈希代码。 (这是不可能的,因为 JVM 中可能同时拥有超过 232 个对象......当然,并非所有 JVM 都支持这一点;但 Java 语言规范中没有任何内容禁止它.)

关于java - 即使两个字符串 s1 和 s3 具有相同的哈希码,== 如何返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40480005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com