Java 什么时候进行类型检查
When does type checking happen in Java
我的作业中有一个问题看起来像这样。
以下哪个过程仅在 Java 的编译期间发生?
(i) 类型推断——推断未指定类型的变量的类型。
(ii) 类型擦除——用 Object 或其绑定替换泛型的类型参数。
(iii) 类型检查——检查值是否与分配给它的变量的类型相匹配。
一个。只有 (i)
B. 只有 (i) 和 (ii)
C. 只有 (i) 和 (iii)
D. 只有 (ii) 和 (iii)
E. (i)、(ii) 和 (iii)
根据我的理解,Java 仅在编译期间对泛型进行类型检查,因此 (i) 和 (ii) 绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎并不局限于泛型,还包括其他方面。
这道题的答案是B,但是没有给出解释。我想知道,什么时候进行类型检查?如果它不仅发生在编译时,它是同时发生在编译时和运行时,还是只发生在运行时,为什么?
它也会在运行时发生,因为您可以将对象转换为其子类型。您可以使用 instanceof.
手动强制它在任何时候再次进行类型检查
You see Java is not a completely statically typed language. Whenever you cast an object from a type to a subtype, the JVM performs a dynamic (runtime) typecheck to check that the object really is an instance of the subtype. Using instanceof is another example of dynamic type checking.
来自这个answer
我的作业中有一个问题看起来像这样。
以下哪个过程仅在 Java 的编译期间发生?
(i) 类型推断——推断未指定类型的变量的类型。
(ii) 类型擦除——用 Object 或其绑定替换泛型的类型参数。
(iii) 类型检查——检查值是否与分配给它的变量的类型相匹配。
一个。只有 (i)
B. 只有 (i) 和 (ii)
C. 只有 (i) 和 (iii)
D. 只有 (ii) 和 (iii)
E. (i)、(ii) 和 (iii)
根据我的理解,Java 仅在编译期间对泛型进行类型检查,因此 (i) 和 (ii) 绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎并不局限于泛型,还包括其他方面。
这道题的答案是B,但是没有给出解释。我想知道,什么时候进行类型检查?如果它不仅发生在编译时,它是同时发生在编译时和运行时,还是只发生在运行时,为什么?
它也会在运行时发生,因为您可以将对象转换为其子类型。您可以使用 instanceof.
手动强制它在任何时候再次进行类型检查You see Java is not a completely statically typed language. Whenever you cast an object from a type to a subtype, the JVM performs a dynamic (runtime) typecheck to check that the object really is an instance of the subtype. Using instanceof is another example of dynamic type checking.
来自这个answer