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
的返回结果只与实际对象类型有关,与指向这个对象的引用类型无关。