为什么 hashCode() 在 java 中对同一个对象给出不同的输出?

why hashCode() gives different output for same object in java?

我有这个代码

class A
{
 public static void main(String reds[])
  {
    A ob=new A();
    System.out.println("Object "+ob);
    System.out.println("HashCode "+ob.hashCode());
  }
}

输出为: Output image

以上代码的输出大部分时间给出不同的值。 此外,下面的 link 提到打印参考变量打印 ClassName@hashcode.

printing reference variable is not printing the object's address

但是,打印参考变量的输出与 hashCode() 不同。这里到底发生了什么?

只是想澄清我在 java 中对哈希码的概念。

当您在对象(A 类型)上调用 println() 时,它会打印 getClass().getName() + "@" + Integer.toHexString(hashCode())(这是对象 [=21 中 toString() 的默认实现=]) 即,它将 hashCode 转换为 hexString。如果你对你的 hashCode 做同样的事情(打印时),你会得到相同的值。

如果您的 class 覆盖 toString,那么它将被打印出来。

Object.toString() 使用十六进制的 hashCode。你自己打印十进制。