黑马程序员技术交流社区

标题: 关于hashCode [打印本页]

作者: 简★零度    时间: 2013-11-19 20:04
标题: 关于hashCode
两个对象相同(x.equals(y)==true).他们的hashCode是否相同?为什么?
求详解!
求案例!
作者: Angel♥儱唲    时间: 2013-11-19 20:35
本帖最后由 Angel♥儱唲 于 2013-11-19 20:56 编辑

1、如果两个对象相同,那么它们的hashCode值一定相同;
2、如果两个对象的hashCode相同,它们并不一定是相同对象 。

前者是因为根据api中object的hashcode方法的描述中写道:如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。

后者举例说明String类String s1="abc"   String  s2=new String("abc")   我们知道s1和s2不是同一个对象,但是他们的hashcode值是相同的。





楼下俩位说的是对的,这里还要看equals的方法定义了,自己重写的话结果真的是变化的
public class Test5 {
        public static void main(String[] args) {
              Person p1=new Person("zhang",23);
              Person p2=new Person("lisi",24);
             System.out.println( p1.equals(p2));
              System.out.println(p1.hashCode() == p2.hashCode());
        }
}
class Person{
        String name;
        int age;
         Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public boolean equals(Object obj){
              return true;
        }
        public int hashCode(){
             return name.hashCode() + age*31;
        }
}

这里任意new出来的对象equals比较都是相等的,但是hashcode是不等的

作者: ysunday    时间: 2013-11-19 20:39
这个不能确定吧,看你怎么复写hashCode方法了 。
比如
class Person{
String name;
int age;

public boolean equals(Object obj){
      return true;
}
public int hashCode(){
     return name.hashCode() + age*31;
}
}

看这段代码中的我为了省事就equals直接返回true了 ,假如用我这个类创建对象,则每个对象都是相等的。但是hashCode貌似是不同的哦

建议你把代码贴出来,好针对你的问题来说
作者: 零下五度的水    时间: 2013-11-19 20:44
你要是调用自带的或者是IDE自动生成的hashcode方法,那就应该是相等的
因为它们是遵守hashcode的常规协定的,
你要是自己写的hashcode方法,那结果完全可以随你喜欢
详解,木有,
案例,懒得打





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2