黑马程序员技术交流社区

标题: 关于instanceof关键字的问题 [打印本页]

作者: 吴扬    时间: 2012-7-2 18:10
标题: 关于instanceof关键字的问题
本帖最后由 吴扬 于 2012-7-5 00:18 编辑

一个instanceof关键字使用的小问题,请大家看看下面这段简单的代码:
ClassA a1 = new ClassA();
ClassA a2 = new ClassA();
System.out.println((a1 instanceof a2));//为什么这里会报错呢?这个instanceof的关键字用法到底是什么样的?

作者: 黑马-王言龙    时间: 2012-7-2 18:19
本帖最后由 wyl530274554 于 2012-7-2 18:29 编辑

没有new Class()的,java里的Class类没有构造函数

instanceOf的用法:对象 instanceof 类


Demo d1 = new Demo();
Demo d2 = new Demo();

你可写 d1 instanceOf Demo

作者: 赵方明    时间: 2012-7-2 18:32
本帖最后由 赵方明 于 2012-7-2 18:44 编辑

instanceof运算符用来判断前面的对象是否是后面的类的实例。
它的前一个操作数通常是一个应用类型变量,后一个操作数通常是一个类。
ClassA a1 = new ClassA();//这里建立一个classA()的对象a1
ClassA a2 = new ClassA();//这里建立一个类classA()的对象a2
System.out.println((a1 instanceof a2));这里比较的a1和a2都是对象,而a2这个位置上本来应该是一个类,所以会报错。
这样写就对了
System.out.println((a1 instanceof classA))

作者: 蒋映辉    时间: 2012-7-2 18:36
楼主可以看看这个
http://topic.csdn.net/t/20051208/14/4446224.html
作者: 李伟    时间: 2012-7-2 18:37
应该是System.out.println(a1 instanceof ClassA)
作者: 葛奎    时间: 2012-7-2 19:59
小资料一枚看看吧.java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
作者: 程有愿    时间: 2012-7-2 20:37
x  instanceof b,这里是判断对象x是否是b类,今天刚从视频里看的
作者: 谭立文    时间: 2012-7-2 22:35
本帖最后由 谭立文 于 2012-7-2 22:36 编辑

instanceof 这个关键字的用法是:
变量名a  instanceof   类名A
说的是 变量a是 A类型吗? 若是为  true
若 有如下代码
class  A
{
}
class B extends A
{
}
A a = new B();
a instanceof B   ???
答案是 true
在这里是有多态存在的,类A是B类的父类,即a是 B类型的上转型对象。
其实当你写 a instanceof B 时实际上是相当于
这样写.
if(a.getClass() == B.class)   //a.getClass(),因为每个类在你定义时都是隐式的重写了getClass方法的所以a.getClass()返回的是B.class  即有多态存在
{
                        System.out.println(a.getClass());
  }

作者: 金龙    时间: 2012-7-3 02:50
instanceof of   是判断某个对象是否从属于某个类的, 你那是对象从属于对象,当然错了。
作者: 吴扬    时间: 2012-7-5 00:18
谢谢大家,明白了!我可能把instanceof和两个对象之间的比较方式弄混了!




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