A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

评分

参与人数 1黑马币 +3 收起 理由
狼王 + 3 赞一个!

查看全部评分

3 个回复

倒序浏览
是啊,equals()可以重写啊

评分

参与人数 1黑马币 +3 收起 理由
狼王 + 3 赞一个!

查看全部评分

回复 使用道具 举报
  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. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 谢谢你的认真

查看全部评分

回复 使用道具 举报
对的。。。

评分

参与人数 1技术分 +1 黑马币 +30 收起 理由
To + 1 + 30 谢谢你的点评!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马