1. 程式人生 > >Java中instanceof和isInstance的區別

Java中instanceof和isInstance的區別

1. instanceof 是一個操作符

使用方法:

A a = new A();
if (a instanceof A) {

}

表示物件a是否是A的例項物件

  1. 一個物件是自身類的一個例項物件
  2. 一個物件是自身類、父類和介面的一個例項物件
  3. 所有物件都是Object類的例項物件
  4. 凡是null有關的都是false,null instanceof(class)

2. isInstance是Class類的一個方法

public boolean isInstance(Object obj)

使用方法:

A a = new A();
if (A.class.isInstance(a)) {

};

表示物件a是否能強轉為A型別

  1. 一個物件是本身類的一個物件
  2. 一個物件能被轉化為本身類所繼承類(父類的父類等)和實現的介面(介面的父介面)強轉
  3. 所有物件都能被Object的強轉
  4. 凡是null有關的都是false, class.inInstance(null)

這個方法的官方文件提到,此方法是 Java 語言 instanceof 運算子的動態等效方法

3. 例項

interface A {
}

class B {
}

class C implements A {
}

class D extends B {
}

public class InstanceOfAndIsInstanceTest {

    public static void main(String[] args) {
        C t1 = new C();
        D t2 = new D();

        // obj instanceof class:這個物件是不是這種型別.
        // 測試1:一個物件是本身類的一個物件
        System.out.println("instanceof-1");
        System.out.println(t1 instanceof C); // true

        // 測試2:一個物件是本身類父類(父類的父類)和介面的一個物件
        System.out.println("instanceof-2");
        System.out.println(t1 instanceof A); // true
        System.out.println(t2 instanceof D); // true

        // 測試3:所有物件都是object
        System.out.println("instanceof-3");
        System.out.println(t1 instanceof Object); // true
        System.out.println(t2 instanceof Object); // true

        // 測試4:凡是null相關的都是false
        System.out.println("instanceof-4");
        System.out.println(null instanceof Object); // false
        System.out.println(null instanceof B); // true

        // class.isInstance(obj):這個物件能不能被轉化為這個類
        // 測試1:一個物件是本身類的一個例項
        System.out.println("isInstance-1");
        System.out.println(C.class.isInstance(t1)); // true

        // 測試2:一個物件能被轉化為本身類所繼承的類(父類的父類)和實現的介面(介面的父介面)強轉
        System.out.println("isInstance-2");
        System.out.println(A.class.isInstance(t1)); // true
        System.out.println(B.class.isInstance(t2)); // true

        // 測試3:所有物件都能被Object強轉
        System.out.println("isInstance-3");
        System.out.println(Object.class.isInstance(t1)); // true
        System.out.println(Object.class.isInstance(t2)); // true

        // 測試4:凡是和null相關的都是false
        System.out.println("isInstance-4");
        System.out.println(Object.class.isInstance(null)); // false
        System.out.println(D.class.isInstance(null)); // false
    }
}

結果:

instanceof-1
true
instanceof-2
true
true
instanceof-3
true
true
instanceof-4
false
false
isInstance-1
true
isInstance-2
true
true
isInstance-3
true
true
isInstance-4
false
false