有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java编译器是否使用instanceof检查两个引用是否属于同一类型?

我想知道java编译器是如何工作的。它是否使用instanceof检查两个引用在编译时是否属于同一类型? e、 g:Super superRef=new Sub(); Sub subRef=(Sub)superRef; 据说在编译时compile会检查赋值两边的两种类型是否匹配。我想知道它是如何在编译器中实现的


共 (1) 个答案

  1. # 1 楼答案

    instanceof是一种运行时检查。编译器在编译时不使用它

    同样,类型cast(Sub) superRef也将在运行时发生,编译器不会检查它(除了排除不可能的情况,例如将String转换为Integer

    编译器会考虑编译类型信息。最重要的是SuperSub的类文件定义。在那里,您将有extendsimplements语句。根据这些,类型层次结构被构建。此信息用于检查类型是否兼容(以及是否存在方法和字段)。如果您正在寻找一个实现这一点的公共API,那么它应该最类似于Super.class.isAssignableFrom(Sub.class)

    instanceof和运行时类型转换这样的事情之所以存在,是因为并不是所有事情都可以提前确定