一、instanceof 关键字是干嘛的?
instanceof是Java、php的一个二元操作符(运算符),和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
通俗点理解就是,用这个关键字来判断左边的这个对象是否是右边这个类的一个实例。
比如:如果想知道小猫是不是动物,可以这么写
if(小猫 instanceof 动物){
小猫是动物;
}else{
小猫不是动物
}
二、理解简单,注意事项
这里用 object instanceof class 来表示这个公式,前面是具体对象,后面是类
1、如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
2、instanceof在Java的编译状态和运行状态是有区别的:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。
区别就是,后面得类不能为前面对象类的子类,不会报错,但是输出结果是false。
三、代码帮助理解
现在用一个经常用到的例子说明,这个就是典型的人类、老王
有一个接口叫做person
public interface Person {
public void eat();
}
他的实现类People
public class People implements Person {
private int a=0;
@Override
public void eat() {
System.out.println("======"+a);
}
}
子类老王
public class Laowang implements People {
private String name;
@Override
public void eat() {
System.out.println("老王要吃人");
}
}
主函数,测试使用
public static void main(String[] args) {
People p=new People();
Laowang L=new Laowang ();
System.out.println(p instanceof Person);
System.out.println(p instanceof Laowang ); //这段代码编译时不会报错
System.out.println(L instanceof Person);
System.out.println(L instanceof People);
}
运行结果:
true
false
true
true