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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public boolean equals(Object obj)
  2.         {

  3.                 if(!(obj instanceof Person))  //
  4.                         return false;
  5.                 Person p = (Person)obj;
  6.                 System.out.println(this.name+"...equals.."+p.name);
  7.                 return this.name.equals(p.name) && this.age == p.age;
  8.         }
复制代码
上面是一段代码,这里为什么要添加

if(!(obj instanceof Person))
                        return false;


这个if语句,在这里有什么意义?
一时不明白··{:soso_e197:}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

6 个回复

正序浏览
郑涛 中级黑马 2012-4-11 14:01:47
7#
也可以写成
if(!(obj instanceof Person))
                        throw new ClassCastException("类型错误");
if语句在这里判断传入的对象是否为Person类的对象,假如不是,就无法成功向下转型,更无法比较。在这里覆写equals方法就失去意义,因此加入健壮性判断
回复 使用道具 举报
instanceof 是一个运算符, 用于判断一个对象是不是属于一个类 当左边是右边的一个对象时 返回true ; if在这是用于判断你传入的对象是否是Person类的对象,如果不是就不用运行下面的代码,不是同一类对象无法比较! 如果不判断,当其他类对象时,编译不会报错,运行会出错ClassCastException ,因为不是Person类,Person p = (Person)obj,向下转型失败。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
instanceof 是双目运算符, 左边是一个对象,右边是一个类, 当左边是右边的一个对象时 返回true ; if在这是用于判断你传入的对象是否是Person类的对象,如果不是就不用
进行下面的代码,不是一个类型的下面比较也没意义; 如果不判断,当传入的不是Person类对象时,编译不会报错,运行会出错ClassCastException  

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
这句话用于判断Person是否被obj包含,
如果不属于的话后面的 Person p = (Person)obj;就无法执行了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
判断obj是否是Person的一个实例。
回复 使用道具 举报
instanceof用来判断一个对象是不是一个类的实例,也可以看它是不是数组(不过不经常用)。Persom   p=(Persom)obj,是将obj转换成Person的实例。
如果Person继承了Object,运行的时候不会有什么异常,但如果Object继承了Person的话,运行的时候会抛出异常。

评分

参与人数 1黑马币 +5 收起 理由
贠(yun)靖 + 5 这是为了防止其他类传进来,任何类都是Obje.

查看全部评分

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