黑马程序员技术交流社区

标题: 这里为什么要添加if(!(obj instanceof Person)) [打印本页]

作者: 李节起    时间: 2012-4-11 12:38
标题: 这里为什么要添加if(!(obj instanceof Person))
  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:}
作者: 莫运飞    时间: 2012-4-11 12:46
instanceof用来判断一个对象是不是一个类的实例,也可以看它是不是数组(不过不经常用)。Persom   p=(Persom)obj,是将obj转换成Person的实例。
如果Person继承了Object,运行的时候不会有什么异常,但如果Object继承了Person的话,运行的时候会抛出异常。
作者: 任杰    时间: 2012-4-11 12:47
判断obj是否是Person的一个实例。
作者: 王永旺    时间: 2012-4-11 12:49
这句话用于判断Person是否被obj包含,
如果不属于的话后面的 Person p = (Person)obj;就无法执行了。
作者: 赵孟恩    时间: 2012-4-11 12:55
instanceof 是双目运算符, 左边是一个对象,右边是一个类, 当左边是右边的一个对象时 返回true ; if在这是用于判断你传入的对象是否是Person类的对象,如果不是就不用
进行下面的代码,不是一个类型的下面比较也没意义; 如果不判断,当传入的不是Person类对象时,编译不会报错,运行会出错ClassCastException  
作者: 黑马张平    时间: 2012-4-11 13:04
instanceof 是一个运算符, 用于判断一个对象是不是属于一个类 当左边是右边的一个对象时 返回true ; if在这是用于判断你传入的对象是否是Person类的对象,如果不是就不用运行下面的代码,不是同一类对象无法比较! 如果不判断,当其他类对象时,编译不会报错,运行会出错ClassCastException ,因为不是Person类,Person p = (Person)obj,向下转型失败。

作者: 郑涛    时间: 2012-4-11 14:01
也可以写成
if(!(obj instanceof Person))
                        throw new ClassCastException("类型错误");
if语句在这里判断传入的对象是否为Person类的对象,假如不是,就无法成功向下转型,更无法比较。在这里覆写equals方法就失去意义,因此加入健壮性判断




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