一、isAssignableFrom()

1、方法说明

java.lang.Class.isAssignableFrom(Class<?>)

public native boolean isAssignableFrom(Class<?> cls);

使用该方法可以判断此Class对象表示的类(或接口)是否与指定的Class表示的类(或接口)相同、或者是它们的超类(或超接口)。 如果此Class对象表示的是基本类型,那么该方法只有在当指定的参数Class正好是此Class对象的类型时返回true,否则返回false。

2、样例

public class Vehicle implements Serializable {
	public int doors;
	public Integer wheels;
}

public class Car extends Vehicle{

}
Vehicle vehicle = new Vehicle();
Car car = new Car();

System.out.println(vehicle.getClass().isAssignableFrom(Vehicle.class));//true
System.out.println(vehicle.getClass().isAssignableFrom(Car.class));//true
System.out.println(Object.class.isAssignableFrom(Vehicle.class));//true

System.out.println(car.getClass().isAssignableFrom(Vehicle.class));//false
try {
	Field doors = vehicle.getClass().getField("doors");
	System.out.println(doors.getType().isAssignableFrom(int.class));//true
	System.out.println(doors.getType().isAssignableFrom(Integer.class));//false
	
	Field wheels = vehicle.getClass().getField("wheels");
	System.out.println(wheels.getType().isAssignableFrom(int.class));//false
	System.out.println(wheels.getType().isAssignableFrom(Integer.class));//true
} catch (NoSuchFieldException | SecurityException e) {
	e.printStackTrace();
}

二、isInstance()

1、方法说明

java.lang.Class.isInstance(Object)

public native boolean isInstance(Object obj);

如果参数obj不是null而且可以强转为此Class对象表示的类,则返回true;否则返回false。 具体来说,如果参数obj是此Class对象所表示的类(或其任何子类)的实例,则返回true;否则返回false。如果此Class对象所表示的是接口,那么只要参数obj或其超类实现了此接口就会返回true,否则返回false。如果此Class所表示的对象是基本类型,则此方法返回false。

2、样例

Vehicle vehicle = new Vehicle();
Car car = new Car();

System.out.println(Vehicle.class.isInstance(vehicle));//true
System.out.println(Vehicle.class.isInstance(car));//true
System.out.println(Serializable.class.isInstance(car));//true
System.out.println(Object.class.isInstance(car));//true
int num = 10;
System.out.println(Integer.class.isInstance(num));//true
System.out.println(int.class.isInstance(num));//false
Object[] objs = new Object[]{new Object()};
Vehicle[] vehicles = new Vehicle[]{new Vehicle()};
Car[] cars = new Car[]{new Car()};

System.out.println(Object[].class.isInstance(vehicles));//true
System.out.println(Object[].class.isInstance(cars));//true
System.out.println(Vehicle[].class.isInstance(cars));//true

System.out.println(Vehicle[].class.isInstance(objs));//false

三、instanceof

Vehicle vehicle = new Vehicle();
Car car = new Car();

System.out.println(vehicle instanceof Vehicle);//true
System.out.println(car instanceof Vehicle);//true
System.out.println(car instanceof Serializable);//true
System.out.println(car instanceof Object);//true
Object[] objs = new Object[]{new Object()};
Vehicle[] vehicles = new Vehicle[]{new Vehicle()};
Car[] cars = new Car[]{new Car()};

System.out.println(vehicles instanceof Object[]);//true
System.out.println(cars instanceof Object[]);//true
System.out.println(cars instanceof Vehicle[]);//true

System.out.println(objs instanceof Vehicle[]);//false
参考资料: