【问题标题】:When does type checking happen in JavaJava 什么时候进行类型检查
【发布时间】:2019-04-24 18:43:28
【问题描述】:

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

以下哪个过程仅在 Java 编译期间发生?

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

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

据我了解,Java 仅在编译期间对泛型进行类型检查,因此 (i) 和 (ii) 绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎不仅限于泛型,还包括其他方面。

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

【问题讨论】:

  • 类型检查发生在运行时和编译时。问的问题 ONLY 在编译时发生。类型检查两者兼而有之。
  • @markspace 你能举一个在运行时进行类型检查的例子吗?
  • @Code-Apprentice 一个例子可以是转换为子类型时

标签: java generics type-inference type-erasure typechecking


【解决方案1】:

它也发生在运行时,因为您可以将对象转换为它们的子类型。您可以随时使用instanceof 手动强制它再次进行类型检查。

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

来自answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2015-04-14
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多