instanceof:测试左边的对象是否是它右边的类的实例,返回 boolean 的数据类型
语法:
class_a obj=new class_b();
obj instanceof class
编译时,看引用变量的类型,在以下三种情况下不会报错
- class是obj对象的父类
- calss是obj对象的自身类
- class是obj对象的子类
运行时,看引用变量实际指向的对象的类型:
其中 obj 为一个对象,class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类的对象,或者是其接口的实现类的对象,结果result 都返回 true,否则返回false。
public class Application {
public static void main(String[] args) {
//object>person>student
//object>person>teacher
Object obj=new Student();
System.out.println(obj instanceof Student);//true
System.out.println(obj instanceof Person);//true
System.out.println(obj instanceof Object);//true
System.out.println(obj instanceof Teacher);//false
System.out.println(obj instanceof String);//false
System.out.println("###########################");
Person person=new Student();
System.out.println(person instanceof Student);//true
System.out.println(person instanceof Person);//true
System.out.println(person instanceof Object);//true
System.out.println(person instanceof Teacher);//false
//System.out.println(person instanceof String); 编译报错,Person与String没有关系
System.out.println("###########################");
Student student=new Student();
System.out.println(student instanceof Student);//true
System.out.println(student instanceof Person);//true
System.out.println(student instanceof Object);//true
//System.out.println(student instanceof Teacher); 编译报错,Student和Teacher没有关系
//System.out.println(student instanceof String); 编译报错,Student和String没有关系
}
}