黑马程序员技术交流社区
标题:
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
[打印本页]
作者:
贾波
时间:
2013-11-28 12:50
标题:
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
作者:
cuilitang
时间:
2013-11-28 12:59
是啊,equals()可以重写啊
作者:
cuilitang
时间:
2013-11-28 13:12
package Test;
public class EqualsDemo {
public static void main(String[] args) {
Person p = new Person("Tony",26);
Person p1 = new Person("Tony",26);
System.out.println("hashcode比较:" + (p.hashCode() == p1.hashCode()));
System.out.println("equals比较:"+ (p.equals(p1) == true));
}
}
class Person{
String name;
int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
Person p1 = (Person)obj;
return this.name.equals(p1.name)&& this.age== p1.age;
}
}
/**
* 默认的equals方法是要比较hashcode值的,但是内存中只要new一个对象,就在堆里面生成新的空间,所以两次new的值hashcode永远不会相等,
* 在实际应用中比较是否相等一般是需要比较属性的,所以我们需要重写equals方法。
*/
复制代码
作者:
狼王
时间:
2013-11-28 19:51
对的。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2