gpt4 book ai didi

java - 每个对象如何彼此不同

转载 作者:行者123 更新时间:2023-11-29 10:02:47 25 4
gpt4 key购买 nike

我在面向对象的上下文中阅读了有关对象标识的文章。其中说“您创建的每个对象都有自己独特的标识”。但是我对下面的代码感到困惑。

     String str="Hello";
String str1="Hello";
System.out.println(str.hashCode()); //69609650
System.out.println(str1.hashCode()); //69609650
System.out.println(System.identityHashCode(str));//19313225
System.out.println(System.identityHashCode(str1));//19313225

str 和 str1 的哈希码和 identityhashcode 是相同的。 如有理解错误请指正

还有 hashcode() 和 system.identityhashcode() 之间的区别

最佳答案

你看到的是因为你正在使用 String,它有一个非常特殊的(几乎独特的)行为:你的两个字符串实际上是一个 String 对象,因为字符串文字自动为 intern'd . JDK 和 JVM 协同工作,将字符串文字放入可重用的 String 实例池中,而不是为相同的字符序列创建单独的 String 实例。

尝试使用 new Object() 进行实验:

 Object a = new Object();
Object b = new Object();
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(b));

Also what is difference between hashcode() and system.identityhashcode()

hashCode 函数可以被类覆盖以返回适合该类的内容。 System.identityHashCode返回与 Object#hashCode 相同的 hashCode如果子类没有覆盖它,返回。

因此对于 Object,您将从它们中的每一个获得相同的返回值。但是对于重写 hashCode 以返回更适合该类的内容(包括 String)的任何类,您会得到不同的值。

关于java - 每个对象如何彼此不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846933/

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