【发布时间】:2015-03-20 01:22:28
【问题描述】:
我阅读了关于 System.identityHashCode(Object x)。你不能覆盖它,因为它的静态方法,但我可以覆盖 Object's hashCode 方法。这也是 System.identityHashCode(Object x) 在 javadoc 中提到的:
为给定对象返回与默认方法 hashCode() 返回相同的哈希码,无论给定对象的类是否覆盖 hashCode()。空引用的哈希码为零。
但是当我通过在 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 方法中的对象??
【问题讨论】: