isAssignableFrom和isInstance、instanceof

Class.isAssignableFrom

Java的Class类,有一个native的方法: isAssignableFrom

public native boolean isAssignableFrom(Class cls);

它的作用是判断调用这个方法或者接口的类或接口与参数传入的类或接口是否相同,或者是其父类,例如:

Object.class.isAssignableFrom(String.class);  // true

Class.isInstance

类似的,Class类还有一个native的方法: isInstance

public native boolean isInstance(Object obj);

它的作用是,传入的参数obj对象(如果为null,则直接返回false),是否是调用这个方法的类或接口的实例,或是其子类的实例,例如:

Map map = new HashMap();
Map.class.isInstance(map);  // true

instanceof

当然,还有最常用的,关键字instanceof
判断左边的对象(如果为null,则直接返回false),是否是右边类或接口的实例,或者子类的实例

Map map = new HashMap();
map instanceof Map  // true

总结

通过对比可以发现,Class.instance 和 instanceof 的作用其实是一样的,是判断一个对象和类或接口的关系,而Class.isAssignableFrom判断的是两个类或接口之间的关系

你可能感兴趣的:(java)