黑马程序员技术交流社区
标题:
这里为什么要添加if(!(obj instanceof Person))
[打印本页]
作者:
李节起
时间:
2012-4-11 12:38
标题:
这里为什么要添加if(!(obj instanceof Person))
public boolean equals(Object obj)
{
if(!(obj instanceof Person)) //
return false;
Person p = (Person)obj;
System.out.println(this.name+"...equals.."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
复制代码
上面是一段代码,这里为什么要添加
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