黑马程序员技术交流社区
标题:
关于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