Java isAssignableFrom()方法与instanceof()方法区别

Posted 阿啄debugIT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java isAssignableFrom()方法与instanceof()方法区别相关的知识,希望对你有一定的参考价值。

isAssignableFrom

用来判断一个类Class1是否与另一个类Class2相同,或者Class1是否是Class2的超类或接口;
格式是:
Class1.isAssignableFrom(Class2);
第一个参数是类对象,第二个参数也是类对象;
如何调用呢,例子如下:

Class parent = java.io.InputStream.class;
Class child = java.io.FileInputStream.class;
System.out.println(parent.isAssignableFrom(child));
System.out.println(child.isAssignableFrom(parent));


输出结果是:
true
false

public class AssignableTest 
 /**
  * isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断。
  * isAssignableFrom()方法是判断是否为某个类的父类,instanceof()方法是判断是否某个类的子类。
  */
 public static void main(String[] args) 
    //isAssignableFromTest();
    isInstanceofTest();
 
 static void isInstanceofTest() 
    String strValue = "abc";
    Object object = new Object();
    System.out.println(strValue instanceof Object); // true
    System.out.println(object instanceof  Object); // true
 
  static void isAssignableFromTest() 
    List<Object> srcValue = new ArrayList();
    Set<Object> srcValue2 = new HashSet<>();
    System.out.println("Collection是List的父类:" + Collection.class.isAssignableFrom(srcValue.getClass()));// Collection是List的父类:true
    System.out.println("List与List相同:" + List.class.isAssignableFrom(srcValue.getClass()));              // List与List相同:true
    System.out.println("Collection是Set的父类:" + Collection.class.isAssignableFrom(srcValue2.getClass())); // Collection是Set的父类:true
    System.out.println("List是Set的父类:" + List.class.isAssignableFrom(srcValue2.getClass())); // List是Set的父类:false
 

instanceof

用来判断一个对象实例obj是否是另一个类或接口的实例;
格式是:
obj instanceof ClassName
第一个参数是实例对象,第二个参数是类名;

总结


由此可以知道,
instanceof是子->父的过程;
isAssignableFrom是父->子的过程。

以上是关于Java isAssignableFrom()方法与instanceof()方法区别的主要内容,如果未能解决你的问题,请参考以下文章

Java isAssignableFrom()方法与instanceof()方法区别

Java isAssignableFrom()方法与instanceof()方法区别

Class对象的isAssignableFrom方法

Java基础-- isAssignableFrom 的用法详细解析

Java中isAssignableFrom的用法

Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别