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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑枫 中级黑马   /  2012-8-7 18:36  /  3535 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑枫 于 2012-8-7 18:37 编辑

  1. <P> public boolean equals(Object obj)
  2. {
  3.   if(!(obj instanceof Person))
  4.    return false;
  5.    Person p = (Person)obj;
  6.   return this.name.equals(p.name) && this.age == p.age;
  7. }</P>
复制代码
什么意思呀,,,,,,
哪一句都很费解,
看视频看了四五遍了,
还是一头雾水。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 慢慢来,加油,赞一个!

查看全部评分

11 个回复

倒序浏览


<P> public boolean equals(Object obj)

{

  if(!(obj instanceof Person))//obj是传进来的Object类型的对象,首先判断obj是不是Person类型

   return false;  如果不是,那就返回false,貌似弄个异常,你能更好理解这里。

   Person p = (Person)obj; 加个强制类型转换,得到Person 类型的p

  return this.name.equals(p.name) && this.age == p.age; 判断name和age是否相同

}</P>
回复 使用道具 举报

<;P> public boolean equals(Object obj)//覆写equals方法。
{
  if(!(obj instanceof Person))//判断你接受的对象是不是属于人的类型。如果你不判断,万一传个狗的类型,狗的类型和人的类型比有意义吗?
   return false;
   Person p = (Person)obj;//把obj的Object类型强制转换成person类型;
  return this.name.equals(p.name) && this.age == p.age;//就就是个比较看是否是一个人,由于我们的person属性很少,所以我们把名字相同比且年龄相同的看成一个人。保证了唯一性~~
}</P>
回复 使用道具 举报

public boolean equals(Object obj)
{
  if(!(obj instanceof Person))
   return false;  这个地方后面毕老师会讲,这里返回false是没有一点意义的,要抛一个异常throw new ClassCastException("类型不匹配");
   Person p = (Person)obj;
  return this.name.equals(p.name) && this.age == p.age;
}

这么说吧,首先,这是定义的是一个方法,你要往里面传什么类型的值,不知道,所以用Object
if(!(obj instanceof Person))
这一句是为了确定传入的数据否是自己想要的类型,比如说,你想要传入的是Person类,然后传进来的是Animal类,这就不行了

Person p = (Person)obj;
这一句代码是强转型,因为你下面要调用数据,但是你传进来的数据时obj数据类型的,所以你要转型一下

return this.name.equals(p.name) && this.age == p.age;
这一句就简单了,姓名相同,而且年龄也相同,那么就是同一个对象,返回,也就是判断是否是同一个对象
回复 使用道具 举报
public boolean equals(Object obj)        定义一个equals方法覆写object中的equals方法
{
  if(!(obj instanceof Person))           判断传入的obj对象是不是Person类型
   return false;                            如果不是就返回false
   Person p = (Person)obj;               强制类型向下转换,因为现在obj是Object类型
  return this.name.equals(p.name) && this.age == p.age;          如果传入的对象是Person类型就会进行判断,判断条件是名字是否相同,以及年龄是否相同
}
回复 使用道具 举报

<P> public boolean equals(Object obj)
{
  if(!(obj instanceof Person))
   return false; //这块上面说的很清楚了,不多说
   Person p = (Person)obj;//这里涉及到多态的问题,这个方法的参数是Object obj,你传进来个person对象相当于Object obj=new Person()这就相当于父类Object的引用obj指向了子类Person的对象,你下面要调用的是子类的变量和方法,所以这里就要有个强转的处理。视频中毕老师举的例子非常形象,毕老师披上毕姥爷衣服,装扮成毕姥爷,他朋友找他去看电影,毕姥爷不会这个功能(或是这个功能被复写),这时就必须将毕老师身上的衣服脱下重新变成毕老师,才能使用他自己看电影的功能。回头看看多态那块,我觉得老师的例子非常形象,有助于理解多态。
  return this.name.equals(p.name) && this.age == p.age;//equals这个方法就是子类复写父类后方法,视频中有句话:父类的引用只能访问父类的成员
}</P>
回复 使用道具 举报
首先:所有类的父类是Object,它中给提供了equals()方法,但是它提供的equals()方法只能比较地址值!
代码是:
public boolean equals()
{
}
而一般比较地址值我们用的很少;所以就复写Object类中的equals()方法,来实现所需的功能!
equals只能用于比较引用数据类型的。
**Object提供的equals是用于比较对象地址值是否相同。
**自定义类中,如果重写了equals方法,那么就是按照你自己的需求来比较的。

x.jpg (96.47 KB, 下载次数: 21)

x.jpg
回复 使用道具 举报
贾成龙 发表于 2012-8-7 22:22
首先:所有类的父类是Object,它中给提供了equals()方法,但是它提供的equals()方法只能比较地址值!
代码 ...

谢谢您的讲解, 小弟记着了。
回复 使用道具 举报
杜佳瑞 发表于 2012-8-7 19:25
public boolean equals(Object obj)
{
  if(!(obj instanceof Person))

:)  谢谢您, 我会多看几遍多态的讲解的。
回复 使用道具 举报
张振纲 发表于 2012-8-7 19:21
public boolean equals(Object obj)        定义一个equals方法覆写object中的equals方法
{
  if(!(obj ins ...

谢谢您的讲解,我会仔细研究您所说的每一句话。
回复 使用道具 举报
马州州 发表于 2012-8-7 19:07
public boolean equals(Object obj)
{
  if(!(obj instanceof Person))

:) 嗯, 我会努力看视频的。
回复 使用道具 举报
黑马振鹏 发表于 2012-8-7 18:52
public boolean equals(Object obj)

{

:handshake 谢谢您的讲解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马