Class instanceof isInstance

class Base{}
class Derived extends Base{}
/**
 * 2018/09/11 <<thinking in java>> RTTI
 * instanceof Class isInstance 等价性
 * @author zz2108828
 */
public class Test{
    static void test (Object x) {
        System.out.println(" Current type: " + x.getClass());
        System.out.println("x instance of Base " + (x instanceof Base));
        System.out.println("x instance of Derived " + (x instanceof Derived));
        System.out.println("Base.isInstance(x) " + Base.class.isInstance(x));
        System.out.println("Derived.isInstance(x) " + Derived.class.isInstance(x));
        System.out.println("x.getClass() == Base.class "+ (x.getClass() == Base.class));
        System.out.println("x.getClass() == Derived.class " + (x.getClass() == Derived.class));
        System.out.println("x.getClass().equals(Base.class) " + x.getClass().equals(Base.class));
        System.out.println("x.getClass().equals(Derived.class) "+x.getClass().equals(Derived.class));
    }
    public static void main(String[] args) {
        test(new Base());
        test(new Derived());
    }
}

 Output:

Current type: class Base
x instance of Basetrue
x instance of Derivedfalse
Base.isInstance(x)true
Derived.isInstance(x)false
x.getClass() == Base.classtrue
x.getClass() == Derived.classfalse
x.getClass().equals(Base.class)true
x.getClass().equals(Derived.class)false
Current type: class Derived
x instance of Basetrue
x instance of Derivedtrue
Base.isInstance(x)true
Derived.isInstance(x)true
x.getClass() == Base.classfalse
x.getClass() == Derived.classtrue
x.getClass().equals(Base.class)false
x.getClass().equals(Derived.class)true

猜你喜欢

转载自www.cnblogs.com/--zz/p/9630415.html