黑马程序员技术交流社区

标题: 重写equals()方法在括号里面添加的对象的疑问 [打印本页]

作者: yasyas001    时间: 2013-5-27 21:15
标题: 重写equals()方法在括号里面添加的对象的疑问
本帖最后由 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;
}
问题可能不是很明确,请见谅

作者: 画饼    时间: 2013-5-27 21:22
写Object是所有的类都可以传进去,
作者: lpflpy    时间: 2013-5-27 21:31
你这个是重写的父类Object的equals()方法,所以你的函数声明部分不能改变,当然参数的类型也不能改变,不然就成重载了;
如果你把参数类型改变了,那么HashSet中使用equals()方法进行判断时,仍然调用的是Object的equals方法,而不是你写的equals方法。
另外,在eclipse下编辑时,如果在改变了参数类型的equals方法上面写上@Override注解时,编译器会报错,进一步证明复写方法时,不能改变参数类型
作者: 张得贵    时间: 2013-5-27 21:40
这的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具备可比性。
作者: 紫衣侯    时间: 2013-5-27 21:51
obj对象名。 object 可以传入任何类型,因为object是所有类的父类,由低到高自动转换




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