java篇 类的进阶0x08:instanceof 操作符

instanceof 操作符

instanceof 操作符,可以判断一个引用指向的对象是否是某一个类型或其子类,是则返回 true,否则返回 false。

之所以是其子类也行,是因为本身子类实例可以当成父类实例来使用。

如果引用是 null,则肯定返回 false。

因为 instanceof 是判断一个对象是不是某个类型的实例,null 本身就为空,不是一个实例,所以自然返回的是 false。

所以 instanceof 有两层意思:

  • 判断实例是否是某个类型的实例(或其子类的实例)
  • 判断是否为空

instanceof常用场景:

  • 别人传参数过来时,判断一下是否为空;
  • 对一些特殊子类操作前,先判断这个对象是否属于这个子类(才可以调用这个子类的方法)。
public class A {
    
}
public class B extends A{
    
}
public class C extends B{
    
}

// 调用类
public class TestUse {
    public static void main(String[] args) {
        A a = new B();
        System.out.println("--------------A----------");
        System.out.println(a instanceof A);					// true
        System.out.println((A)a instanceof A);				// true
        System.out.println((B)a instanceof A);				// true

        System.out.println("--------------B----------");
        System.out.println(a instanceof B);					// true
        System.out.println((A)a instanceof B);				// true
        System.out.println((B)a instanceof B);				// true

        System.out.println("--------------C----------");
        System.out.println(a instanceof C);					// false
        System.out.println((A)a instanceof C);				// false
        System.out.println((B)a instanceof C);				// false

        System.out.println("--------------null----------");
        System.out.println(null instanceof A);				// false
        System.out.println((A)null instanceof A);			// false
        System.out.println((B)null instanceof A);			// false
        System.out.println((C)null instanceof A);			// false
    }
}

// 说明 instanceof 的返回结果只与实际对象类型有关,与指向这个对象的引用类型无关。

instanceof 的返回结果只与实际对象类型有关,与指向这个对象的引用类型无关。

你可能感兴趣的:(java,java)