为什么 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。你自己打印十进制。
我有这个代码
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。你自己打印十进制。