我的作业中有一个类似这样的问题。
以下哪些过程仅在Java编译期间发生?
(i)类型推断–推断未指定类型的变量的类型。
(ii)类型擦除–用Object或其边界替换泛型的类型参数。
(iii)类型检查–检查该值是否与为其分配的变量的类型匹配。
A。只有(i)
B.仅(i)和(ii)
C.仅(i)和(iii)
D.仅(ii)和(iii)
E.(i),(ii)和(iii)
据我了解,Java仅在编译时对泛型进行类型检查,因此(i)和(ii)绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎并不限于泛型,还包括其他方面。
这个问题的解决方案是B,但是没有给出解释。我当时在想,什么时候进行类型检查?如果它不仅在编译时发生,还是在编译时和运行时都发生,还是仅在运行时发生,为什么?
答案 0 :(得分:3)
它也会在运行时发生,因为您可以将对象转换为它们的子类型。您可以手动强制它随时使用instanceof再次进行类型检查。
您看到Java不是完全静态类型的语言。每当将对象从类型转换为子类型时,JVM都会执行动态(运行时)类型检查,以检查该对象确实是该子类型的实例。使用instanceof是动态类型检查的另一个示例。
来自此answer