instanceof

类型转换 引用类型,判断一个对象是什么类型

obj instanceof Class

其中 obj 为一个对象,Class 表示一个类或者一个接口

左边的引用类型是否与右边的引用类型的类型是否相同,或左边引用类型是右边引用类型的子类或实现类(右边引用类型可以是类、抽象类、接口)

注意

  1. 左边的对象实例不能是基础数据类型

  2. 左边对象实例和右边的类必须在同一个继承树上

  3. 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);  
       }
    }
     

     

posted @ 2023-02-12 23:24  早日月薪五万  阅读(135)  评论(0编辑  收藏  举报