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的子类就好了。

浙公网安备 33010602011771号