由于Java没有多类继承,因此在编译过程中绝对知道
obj类型的对象
B不能是的子类型
A。另一方面,它可能是interface的子类型
C,例如在这种情况下:
interface C {}class B {}class D extends B implements C {}public class A { public static void main(String args[]) { B obj = new D(); System.out.println(obj instanceof C); //compiles and gives true as output }}因此,仅查看
obj instanceof C表达式编译器无法预先知道它是对还是错,但是查看
obj instanceofA它知道这始终是假的,因此毫无意义,可帮助您防止错误。如果您仍然希望在程序中进行无意义的检查,则可以在上添加显式强制转换
Object:
System.out.println(((Object)obj) instanceof A); //compiles fine



