日期:2014-05-20  浏览次数:20702 次

Object的hashCode()和equals()有什么关系吗?
为什么我不复写自己定义的某个类的equals方法 两个相同的对象就不能得到相同的hashCode值?
我自己复写equals就可以了。。。

这是为什么????

------解决方案--------------------
应该木关系
------解决方案--------------------
重写equals方法,必须也要重写hascode方法
------解决方案--------------------
如果你不重写子类的方法。

那么调用方法的时候调用的就是他们父类Object类的这个方法。

源码里是这样的。
Java code

public boolean equals(Object obj) {
    return (this == obj);
}

------解决方案--------------------
探讨

重写equals方法,必须也要重写hascode方法

------解决方案--------------------
LZ想要进一步了解的话可以看看数据结构中的哈希表hashtable
hashtable实际上是一个Mapper(映射)KEY就是hashcodeVALUE就是对象的内容
所以不同对象的hashcode必须不同,否则就无法正确定位到对象
我们也可以认为hashcode是一个地址
------解决方案--------------------
hashCode()方法要与equals()方法一同覆盖。
当两个对象equals比较为true时候,这两个对象应该只有相同的hashCode()值
当两个对象equals比较为false时候,这两个对象应该具有不同的hashCode()值。