黑马程序员技术交流社区

标题: 两个对象值相同(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
  1. package Test;

  2. public class EqualsDemo {
  3.         public static void main(String[] args) {
  4.                 Person p = new Person("Tony",26);
  5.                 Person p1 = new Person("Tony",26);
  6.                 System.out.println("hashcode比较:" + (p.hashCode() == p1.hashCode()));
  7.                 System.out.println("equals比较:"+ (p.equals(p1) == true));
  8.                
  9.         }
  10.        
  11.        

  12. }

  13. class Person{
  14.         String name;
  15.         int age;
  16.         Person(String name,int age){
  17.                 this.name = name;
  18.                 this.age = age;
  19.         }
  20.         @Override
  21.         public boolean equals(Object obj) {
  22.                 Person p1 = (Person)obj;
  23.                 return this.name.equals(p1.name)&& this.age== p1.age;
  24.                        
  25.         }
  26. }

  27. /**
  28. * 默认的equals方法是要比较hashcode值的,但是内存中只要new一个对象,就在堆里面生成新的空间,所以两次new的值hashcode永远不会相等,
  29. * 在实际应用中比较是否相等一般是需要比较属性的,所以我们需要重写equals方法。
  30. */
复制代码

作者: 狼王    时间: 2013-11-28 19:51
对的。。。




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