Java instanceof运算符

Java instanceof运算符

java instanceof运算符用于测试指定对象是否是指定类型(类或子类或接口)的实例。

1,java中的instanceof也称为类型比较运算符,因为它将类型与实例进行比较,它返回true或false。
2,如果对任何具有null值的变量应用instanceof运算符,则返回false

应用场景:

1,用来检测是不是类的实例

甚至可以用来检测对象是不是自定义类加载器加载的同名类的实例。
(jvm判断是不是同一个类,是根据:类全名+类加载器)

2,检测是否可以向下转型。

//编译报错
Dog d=new Animal();//Compilation error //编译可以通过,但运行时抛出:ClassCastException。 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime

可以通过instanceof验证是否是子类。

class Dog3 extends Animal {
    static void method(Animal a) {
        if (a instanceof Dog3) {
            Dog3 d = (Dog3) a;// downcasting
            System.out.println("ok downcasting performed");
        }
    }
public static void main(String[] args) { Animal a = new Dog3(); Dog3.method(a); }

为什么不直接使用Dog类型的做参数,多此一举?

ps:这就要说的一个特性:多态,这么做:

1,可以限制一定是父类有过的行为。
2,更加灵活可以扩展传入的对象,只要是Animal的子类就好了。

Java里面instanceof怎么实现的

更加深入的探讨(没看懂)

posted @ 2018-02-17 20:45  假程序猿  阅读(264)  评论(0)    收藏  举报