instanceof表示此操作符左边的变量的实际类型是否是右边类型或右边子类型的一个实例,用法:
a instanceof B
Class1.isAssignableFrom(Class2) 表示Class1类型可不可以引用一个Class2表示的实例。也就是Class1 c = new Class2()是否正确。也就是判断Class2类型是否是Class1类型或且子类型:
例如 class C extends B{}; class B extends A{};
A a = new B();
System.out.println("a instanceof A: "+(a instanceof A));
System.out.println("a instanceof C: "+(a instanceof C));
System.out.println("a instanceof B: "+(a instanceof B));
其结果为
true
false
true
因为变量a的实际类型为B,所以a是B类型的一个实例,也可以说是类型A的子类型B的一个实例。所以1和3为true
又如:
A a = new B();
System.out.println(a.getClass().isAssignableFrom(A.class));
System.out.println(a.getClass().isAssignableFrom(B.class));
System.out.println(a.getClass().isAssignableFrom(C.class));
结果为
false
true
true
这里a的实际类型为B,而B类型可以引用一个B类型或C类型的实例,也就是B a=new B()和B a=new C()。所以这里2和3是正确的。