gpt4 book ai didi

java - System.identityHashCode() 和 hashCode() 方法的内部工作原理是什么?

转载 作者:行者123 更新时间:2023-11-30 07:03:51 31 4
gpt4 key购买 nike

我阅读了关于System.identityHashCode(Object x)。你不能覆盖它,因为它是静态方法,但我可以覆盖 Object's hashCode 方法。 javadoc 中的 System.identityHashCode(Object x) 也提到了这一点:

Returns the same hash code for the given object as would be returned by the default method hashCode(), whether or not the given object's class overrides hashCode().The hash code for the null reference is zero.

但是当我通过在 println 方法中交换对象在代码下面运行时,我得到了相同的结果。

public class SherlockGCD {
public int hashCode()
{
return super.hashCode();
}
public static void main(String[] args) {
SherlockGCD sher= new SherlockGCD();
SherlockGCD sher1= new SherlockGCD();
System.out.println(System.identityHashCode(sher));
System.out.println(sher1.hashCode());
}
}

输出是:

31866429

16795905

但是如果你如下交换对象,那么输出也是一样的

    System.out.println(System.identityHashCode(sher1));
System.out.println(sher.hashCode());

输出是:

31866429

16795905

那么为什么输出不是反转,因为我正在更改 println 方法中的对象??

最佳答案

but when i am running below code by swapping the object in println method i am getting same result.

您不应将 hashCode 在一次运行中的结果与另一次运行中的结果进行比较。例如,您可能观察到身份哈希码是延迟分配的 - 因此无论您请求哈希码的哪个对象首先获得 31866429,下一个获得 16795905 - 在您的特定系统上。

如果您在一次运行中颠倒顺序,您应该会看到一致的结果:

System.out.println(System.identityHashCode(sher));
System.out.println(sher1.hashCode());
System.out.println(System.identityHashCode(sher1));
System.out.println(sher.hashCode());

此处输出的第 1 行和第 4 行应具有相同的值,第 2 行和第 3 行应具有相同的值。

关于java - System.identityHashCode() 和 hashCode() 方法的内部工作原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068655/

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