有什么可以使用instanceof运算符比较对象?

时间:2016-10-16 08:48:31

标签: java instanceof

class A{}
A a = new A();
Class a1 = A.class;

System.out.println(a instanceof A);   //true
System.out.println(a1.isInstance(a)); //true
System.out.println(a instanceof a1);  //compile error

Class.isInstance是Java语言instanceof运算符的动态等价物。所以我认为“A”是“类”对象,但为什么编译错误?而“instanceof”对象的对象是什么类型?

3 个答案:

答案 0 :(得分:0)

说明

因为使用instanceof,您应该提供类名,而不是表示有关此类的信息的对象(即不是类Class的对象)。 isInstance使用calss的Class - 对象instanceof - 名称

实施例

System.out.println(a instanceof A);   //<object> instanceof <class name>
System.out.println(a1.isInstance(a)); //<Class object>.isInstance(<object>)
System.out.println(a instanceof a1);  //error: <object> instanceof <Class object>
System.out.println(A.isInstance(a));  //error: <class name>.isInstance(<object>)

答案 1 :(得分:0)

对其类型进行分类,而不是实例。

System.out.println(a instanceOf a1);  //compile error

此行类似“此对象TYPE是OBJECT的类型” 这没有意义。 a是TYPE“CLASS”的对象 a1是TYPE“A”的对象

答案 2 :(得分:0)

请参阅规范中的instanceof

System.out.println(a instanceOf A);   //true

不,那是一个语法错误。 instanceof没有资本O。但是a instanceof Atrue,是的。

System.out.println(a instanceOf a1);  //compile error

同样,instanceof有一个小写o。但是,这是一个编译错误,因为您正在aA.class而不是A进行检查。

instanceof右侧的操作数必须是引用类型的名称,而不是Class类的实例。 A是引用类型的名称。 A.classClass类的实例。