Detailed Explanation of Java Object Type Judgment

  • 2021-07-22 09:52:52
  • OfStack

instanceof

Determines whether an object is an instance of a class or an instance of a subclass of a class. Its way of judging is probably like this:


public<T> boolean function(Object obj, Class<T> calzz) {
    if (obj == null) {
      return false;
    }
    try {
      T t = (T) obj;
      return true;
    } catch (ClassCastException e) {
      return false;
    }
  }

Class.equals()

In this way, the type of comparison, 1 must return true only by itself, and the subclass or parent class returns false;


 // B Yes A A subclass of, C Yes B Subclass of 
    B b = new B();
    // false
    System.out.println(b.getClass().equals(A.class));
    // true
    System.out.println(b.getClass().equals(B.class));
    // false
    System.out.println(b.getClass().equals(C.class));

PS: b. getClass (). equals (A. class) is equivalent to b. getClass () = = A. class

Class.isInstance()

This method is completely equivalent to instanceof.


 // B Yes A A subclass of, C Yes B Subclass of 
    B b = new B();
    // true
    System.out.println(A.class.isInstance(b));
    // true
    System.out.println(B.class.isInstance(b));
    // false
    System.out.println(C.class.isInstance(b));

Class.isAssignableFrom

Determines whether a class is another class and its subclasses.


 // B Yes A A subclass of, C Yes B Subclass of 
    // false
    System.out.println(B.class.isAssignableFrom(A.class));
    // true 
    System.out.println(B.class.isAssignableFrom(B.class));
    // true
    System.out.println(B.class.isAssignableFrom(C.class));

Related articles: