首先,语法上:
obj.instanceof(class),obj为任意一个类对象,class则是另外一个类的名称。
Class.inInstance(obj),Class为Class对象,obj则为任意一个类对象如
Class.isAssignableFrom(cls),Class为Class对象,cls为Class类对象
具体用法参见下面代码:
class SuperA{}
class A extends SuperA{}
class Test{
public static void main(String[] args) {
A a1 =new A();
SuperA superA =new SuperA();
SuperA a2 =new A();
System.out.println(a1 instanceof A);
System.out.println(superA instanceof SuperA);
System.out.println(a2 instanceof SuperA);//这里就体现出来了instancof和isInstance的区别了
System.out.println(a2 instanceof A);
System.out.println();
System.out.println(a1.getClass().isInstance(a1));
System.out.println(superA.getClass().isInstance(superA));
System.out.println(a2.getClass().isInstance(superA));//false
System.out.println(a2.getClass().isInstance(a1));
System.out.println();
System.out.println(a1.getClass().isAssignableFrom(a1.getClass()));
System.out.println(superA.getClass().isAssignableFrom(SuperA.class));
System.out.println(a2.getClass().isAssignableFrom(SuperA.class));//false
System.out.println(a2.getClass().isAssignableFrom(A.class));
}
}
true
true
true
true
true
true
false
true
true
true
false
true
至于功能,目前个人暂且认为功能相似,仅在语法上对其进行区分。其中,isInstance 在thinking in java中被称为,动态instanceof