本帖最后由 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是不等的
|