instanceof关键字的详细解释
在创建对象的时候,左边的类型是静态不变的,定义什么类型就是什么类型,而右边对象的实际类型是一个动态不确定的,可以是左边的基类型或其子类型。(多态的思想)
interface A{}
class B implements A{
}
class C extends B {
}
public class Demo76 {
public static void main(String[] args) {
A a1 = new B();
A a2 = new C();
B b1 = new C();
System.out.println(a1 instanceof A);//true
System.out.println(a1 instanceof B);//true
System.out.println(a1 instanceof C);//false
System.out.println(a2 instanceof A);//true
System.out.println(a2 instanceof B);//true
System.out.println(a2 instanceof C);//true
System.out.println(b1 instanceof A);//true
System.out.println(b1 instanceof B);//true
System.out.println(b1 instanceof C);//true
}
}
由上面的例子我们可以得到instanceof运算符:它的运行时语义并不关心它的左操作数的引用的静态类型,而只关心它所引用的对象的实际类型(堆中的实际类型)是否跟右操作数所指定的类型相匹配。
如果想更加详细的了解instanceof关键字,可以去看看大牛的解读https://www.zhihu.com/question/21574535/answer/18998914