什么时候在Java中进行类型检查

问题描述 投票:5回答:1

我的作业中有一个问题,看起来像这样。

只有在Java编译期间才会发生以下哪个过程?

(i)类型推断 - 推断未指定类型的变量的类型。 (ii)类型擦除 - 用Object或其边界替换泛型的类型参数。 (iii)类型检查 - 检查值是否与分配给它的变量的类型相匹配。

A.仅(i) B.仅(i)和(ii) C.仅(i)和(iii) D.仅(ii)和(iii) E.(i),(ii)和(iii)

根据我的理解,Java仅在编译期间对泛型执行类型检查,因此(i)和(ii)肯定是正确的。但是,我不确定类型检查,并且从提供的描述看来,类型检查似乎不仅限于泛型,还有其他一些东西。

这个问题的解决方案是B,但没有给出解释。那时我想知道什么时候进行类型检查?如果它不仅发生在编译期间,它是在编译时和运行时期间发生,还是仅在运行时发生,为什么?

java generics type-inference type-erasure typechecking
1个回答
3
投票

它也会在运行时发生,因为您可以将对象强制转换为其子类型。您可以手动强制它在任何点使用instanceof进行类型检查。

您看到Java不是完全静态类型的语言。无论何时将对象从类型转换为子类型,JVM都会执行动态(运行时)类型检查以检查该对象是否真的是子类型的实例。使用instanceof是动态类型检查的另一个例子。

来自这个answer

© www.soinside.com 2019 - 2024. All rights reserved.