为什么当object1.equals(object2)返回true时,object1.hashCode()还是会出现object2.hashCode()不等列? 

解决方案 »

  1.   

    override equals() and didn't override hashCode()?
      

  2.   

    理论上是应该相等的吧,
    在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。
      

  3.   

    hashCode默认是比较散列值,而散列值默认情况是两个对象的引用值,所以是不相等的
    因此必须覆盖equals方法是一定要覆盖hashCode方法
      

  4.   

    如果你是自定义的类,要想让hashcode相等,hashCode()方法也是要重写的。
      

  5.   

    怎样重写了hashCode()才能保证,equals()相等时,hashCode()也相等
    HashSet执行put(object key,object value)比较key是否相等时用的是equals()方法还是hashCode()方法
      

  6.   

    HashMap执行put(object key,object value)比较key是否相等时一定要重写equals()方法和hashCode()方法,如何重写是按照自己的需要来写的
      

  7.   

    在重写equals()方法和hashCode()方法,我知道是在用List容器的时候是不用覆盖的,但是用Set容器的时候是必须要覆盖的,这是取决于List和Set容器的特征的, List容器装进去的东西是有序可重复的,而Set容器是无序不可重复的,所以在使用Set容器的时候必须要覆盖这两个方法,因为Set容器就是根据这两个方法来判断你加进去的东西是否属于同一个东西.至于hashCode()方法返回的值.假如你要返回的是某个属性的hashCode值,那么你应该这么去写.
    return this.age.hashCode();(假如这个属性是age,是int型的).别写成了return this.age;希望对楼主有所帮助.
      

  8.   

    我的意思是为什么非要用equals()和hashCode()两个方法来判断HashMap(Object key,Object value)中key是否相等,一个equals()方法不就足够了吗?equals()方法中也没有涉及hashCode()方法啊,为什么一定要同时覆盖这两个方法呢?
      

  9.   

    用hashcode定位存储的位置。
    参考一些数据结构中hash表的实际表示或者直接看Hashmap类的源代码。
      

  10.   

    equals是指两个对象的内容一致,==是指两个指向同一个对象,所以equals为true不一定==,如果==就一定会equals,偶这么认为的
      

  11.   

    同时覆盖equals和hashcode方法后
    如果equals相等则hashcode相等
      

  12.   

    用hashCode是为了效率,
    得重写equals是因为有可能hashCode相等的对象有多个
    查字典,你的hashCode得到的是页码,在同一页当中有很多的值,然后再用equals方法比较。
      

  13.   

    按理是相等的,要同时覆盖equals和hashcode
      

  14.   

    最简单的方法就是用Eclipse 自己生成equals()和hashCode()
      

  15.   


    class TestOne{
    private String firstName;
    private String lastName;
    public boolean equals(Object objeTestOne){
    if(objeTestOne==null){
    return false;
    }
    if(objeTestOne instanceof TestOne){
    TestOne temp=(TestOne)objeTestOne;
    return this.firstName.equals(temp.firstName)&&this.lastName.equals(temp.lastName);
    }
    return false;
    }
    public int  hashCode(){
    return firstName.hashCode();
    }
    }有可能hashCode相等,equals不等
      

  16.   


    java中,比较其实是比较的内存地址,用equals()比较效率太低,所以java采用比较hashCode()来实现比较两个值是否相等.
      

  17.   

    不认同,当你重写了equals时候比较的是内容是否相等,前提是你重写了,如果没有重写比较的还是地址,在我看来重写equals必须重写hashcode,在封装类,DATE,String等中都是对equals重写了
      

  18.   

    equals此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。