instanceof() isInstanceof() isAssignableFrom()三者之间的区别。

首先,语法上:

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



猜你喜欢

转载自blog.csdn.net/qq_41791653/article/details/80484752