为什么我不复写自己定义的某个类的equals方法  两个相同的对象就不能得到相同的hashCode值?
我自己复写equals就可以了这是为什么????

解决方案 »

  1.   

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

  2.   

    如果你不重写子类的方法。那么调用方法的时候调用的就是他们父类Object类的这个方法。源码里是这样的。public boolean equals(Object obj) {
    return (this == obj);
    }public native int hashCode();
    hashCode()调用的是本地方法。
      

  3.   


    并不是所有情况,都要两个都重写。假如我这个类,我的需求是不需要容器来装,只需要有比较此类对象是否相等的功能。那么,我只要重写equals足矣。
      

  4.   

    LZ想要进一步了解的话可以看看数据结构中的哈希表hashtable
    hashtable实际上是一个Mapper(映射)KEY就是hashcodeVALUE就是对象的内容
    所以不同对象的hashcode必须不同,否则就无法正确定位到对象
    我们也可以认为hashcode是一个地址
      

  5.   

    hashCode()方法要与equals()方法一同覆盖。
    当两个对象equals比较为true时候,这两个对象应该只有相同的hashCode()值
    当两个对象equals比较为false时候,这两个对象应该具有不同的hashCode()值。
      

  6.   

    hashCode()方法有没有调用equals方法