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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yasyas001 于 2013-5-28 22:45 编辑

@Override
public int hashCode() {
  return this.name.hashCode() + this.age * 13;
}
@Override
public boolean equals(Object obj) //这里的obj代表的是什么,我应该怎么明确?
{
  if (this == obj) {
   return true;
  }
  if (!(obj instanceof Student)) {
   return false;
  }
  Student s = (Student) obj;
  return this.name.equals(s.name) && this.age == s.age;
}
问题可能不是很明确,请见谅

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

正序浏览
obj对象名。 object 可以传入任何类型,因为object是所有类的父类,由低到高自动转换

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
这的obj意思是说,传入一个Object类型的对象,因为Object类是所有类的父类,所以任何一个对象都是符合题意的。this代表本类对象的引用,也就是说,哪个对象调用this,this就代表哪个对象,这个equals方法,是用于比较你传入的obj对象是否和本类对象一致,如果一致,就返回true,不一致就返回false。你问怎么明确obj我觉得你应该看这句Student s = (Student) obj;意识是将obj强转为Student类型的引用,然后下面一句 return this.name.equals(s.name) && this.age == s.age;就调用了你刚才定义的equuals方法,使传入的obj与this具备可比性。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
你这个是重写的父类Object的equals()方法,所以你的函数声明部分不能改变,当然参数的类型也不能改变,不然就成重载了;
如果你把参数类型改变了,那么HashSet中使用equals()方法进行判断时,仍然调用的是Object的equals方法,而不是你写的equals方法。
另外,在eclipse下编辑时,如果在改变了参数类型的equals方法上面写上@Override注解时,编译器会报错,进一步证明复写方法时,不能改变参数类型

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 很给力!

查看全部评分

回复 使用道具 举报
写Object是所有的类都可以传进去,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马