instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
这里说明下:
类的实例包含本身的实例,以及所有直接或间接子类的实例
instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
这里用样例说明一下:
//word类
public class Word {
}
//Animal类
public class Animal extends Word{
}
//Dog类
public class Dog extends Animal{
}
测试类
public class Text {
public static void main(String[] args) {
Animal dog = new Dog();
System.out.println(dog instanceof Dog);
System.out.println(dog instanceof Animal);
System.out.println(dog instanceof Word);
System.out.println("==============================");
Animal animal = new Animal();
System.out.println(animal instanceof Dog);
System.out.println(animal instanceof Animal);
System.out.println(animal instanceof Word);
System.out.println("==============================");
Word word = new Word();
System.out.println(word instanceof Dog);
System.out.println(word instanceof Animal);
System.out.println(word instanceof Word);
}
}
结果
这是我总结的结论:
instanceof左边是对象,右边是类。当初始化左边对象的时候,初始化对象的类是右边那个类的子类或者本身的时候返回true,否则返回false;
第一个样例:Dog是Dog本身,Dog是Animal的子类,Dog是Word的孙子;所以都是true;
第二个样例:Animal是Dog的父类,创建的时候是以Animal创建的,所以animal instanceof Dog返回false,Animal是Animal本身,Animal是Word子类,所以都返回true;
第三个样例:只有Word是word本身,Animal,Dog是Word的子类,所以word instanceof Animal,word instanceof Dog返回false,word instanceof Word返回true;