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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飘雪恩情 初级黑马   /  2014-2-21 19:56  /  1121 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class person
{
  private String name ;
  private int  age;
  person(String name,int age)
{
    this.name=name;
    this.age=age;
   
  }
  public int hashCode()
{
  System.out.println(this.name+"...hashCode");
  return name.hashCode()+age;
  }
  public boolean equals(objec  obj)
  {
   if(!(obj instanceOf person))
      return false;
    person  p=(person)obj;
    return this.name.equals(p.name)&&this.age=p.age;
   }
  public String getName()
{
  return name;

}
  public int getAge()
   {
     return age;
    }
}
上面程序中的 return this.name.equals(p.name)&&this.age=p.age; 中的 this.name 与p.name怎么区分啊?我分不清。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
这么说吧,假如你现在要比较2个Person对象,
Person A = new Person("张三",25);
Person B = new Person("李四",26);
调用equals方法来比较:A.equals(B);
代码中的this.name指的就是对象A里的name,p.name就是对象B里的name。
而且上面的代码equals方法中最后应该是 return this.name.equals(p.name)&&this.age==p.age才对的吧

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
一年_Hei 来自手机 中级黑马 2014-2-21 20:15:53
藤椅
你这是this关键字还没了解透。this表示当前调用equals方法的那个对象。p表示传入equals方法的对象。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
return this.name.equals(p.name)&&this.age=p.age; 中的 this.name 与p.name这句你不明白吗?
比如S1.equal(S2)中return中的this是S1,P是S2

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
this就是当前对象,HashSet在存储数据时会判断已经存储的数据中是否有这些数据,他会先调用hashCode()方法来判断已经存储的数据中是否有即将存储的数据,如果hashCode()方法返回的哈希值在HashSet中的数据的哈希值都不相同那么就会直接把这个数据存储进去,如果相同就会调用equals()方法在判断这个数据的内容,而equals()方法中的this就代表已经存储在hashCode()中的数据,而你所说的P则是要往HashSet中存储的数据。不知道你懂了没?
如果要用到HashSet存储对象那么就需要在对象的类中覆写hashCode()和equals()方法。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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