- 作用:用于判断某个对象是否是某个特定类或该特定类的一个实例,返回一个布尔类型.
- 一般格式 object instanceof class(class可以是类也可以是接口)
- 具体使用:
分编译阶段和运行阶段:
在编译阶段:object所属的类可以是class类本类、同级类、父类、子类。
示例:
public class Animal {
}
public class Cat extends Animal{
}
public class Dog extends Animal {
}
public class Labrador extends Dog{
}
public class Computer{
}
public class Main {
public static void main(String[] args) {
Animal animal=new Dog();
System.out.println(animal instanceof Dog);//animal所属类是Dog本类
System.out.println(animal instanceof Cat);//animal所属类是Cat同级类
System.out.println(animal instanceof Animal);//animal所属类是Animal子类
System.out.println(animal instanceof Labrador);//animal所属类是Labrador父类
}
}
以上在编译阶段都没有报错, 但如果判读与之毫无相关的类例如animal instanceof Computer在编译时就会报错。
在运行阶段:
以上运行结果为:
true
false
true
false
不难看出在运行阶段:object所属的类为class类本类、子类时为true,父类、同级类时为false。
这样以来在类型转换时,例如:Cat cat=(Cat)animal; 如果直接转换就会出现类型转换异常(运行时报错,编译时没有),这时就可以用instanceof判断一下:if(animal instanceof Cat) Cat cat=(Cat)animal;
接口版本:
public interface Animal {
}
public class Dogimp implements Animal{
}
public class Catimp implements Animal{
}
public class Main {
public static void main(String[] args) {
Animal animal=new Dogimp();
System.out.println(animal instanceof Dogimp);//本
System.out.println(animal instanceof Catimp);//同级
System.out.println(animal instanceof Animal);//父
}
}
运行结果:
true
false
true