instanceof
类型转换 引用类型,判断一个对象是什么类型
obj instanceof Class
其中 obj 为一个对象,Class 表示一个类或者一个接口
左边的引用类型是否与右边的引用类型的类型是否相同,或左边引用类型是右边引用类型的子类或实现类(右边引用类型可以是类、抽象类、接口)
注意
-
左边的对象实例不能是基础数据类型
-
左边对象实例和右边的类必须在同一个继承树上
-
null 用 instanceof 跟任何类型比较时都是 false
public interface A{} public Class B implements A{} public Class C extends B{} public class Test{ public static void main(String[] args) { A a = null; B b = null; //flase ,因为null和任何类型比都是false System.out.println(a instanceof A); System.out.println(b instanceof B); a = new B(); b = new B(); //true a是接口A的实例对象引用指向子类B,也就是B和A比,B实现了A接口 System.out.println(a instanceof A); //true a是接口A的实例对象引用指向子类B,也就是B和B比 System.out.println(a instanceof B); //true b是类B的实例对象,也就是B和A比,B实现了A接口 System.out.println(b instanceof A); //true b是类B的实例对象,也就是B和B比 System.out.println(b instanceof B); B b1 = new B(); B b2 = new C(); //fasle b1是B的实现类,也就是B和C比,B不是C的子类 System.out.println(b1 instanceof C); //true b2是父类B引用指向子类C,也就是C和A比,C是A的子类 System.out.println(b2 instanceof A); //true b2是父类B引用指向子类C,也就是 C和B比,C是B的子类 System.out.println(b2 instanceof B); //true b2是父类B引用指向子类C,也就是是C和C比 System.out.println(b2 instanceof C); } }