原始 class 和原始数据类型有什么区别?

What is the difference between a primitive class and primitive data type?

我正在读一本关于 Java 的书,他们似乎可以互换使用 "primitive class" 和 "primitive data type" 这两个术语。

两者有什么区别?我知道 Integer 是一个包装器 class,人们将 int 称为原始数据类型。那么它也是原始的吗class?

他们在这里混淆了他们的白话。

原语是一种数据类型,它不是对象。 intfloatdoublelongshortbooleanchar 是基本数据类型的示例。您不能对这些数据类型调用方法,并且它们不会占用大量内存,这是它们与 classes.

的显着区别

其他所有东西 都是class(或者在接口和枚举的情况下类似于class)。几乎所有以大写字母开头的东西,比如 StringInteger 都是 class。数组也 class 化为非基元,即使它们可能包含它们。 int[] 不是原始类型,但它包含原始类型。

唯一可能 close 的是包装器 classes,as explained by the JLS,但即使那样,它们也是 仍然 classes,而不是原语。

Primitive class 在反射 API 的上下文中有一个特殊的含义:当你需要检索一个带有原始类型参数的方法时,你需要一个原始 class 对象对应于那种原始类型。

如果您必须区分采用原语的重载和采用包装器的重载,这一点很重要:

void someMethod(int n);
void someMethod(Integer n);

有两种方法可以获得这个class对象:

  • 使用 class 文字,例如int.class,或
  • 使用对应的 wrapper class 的 TYPE 成员,例如Integer.TYPE.

这与表示原始包装器的 class 不同 class。也就是说,

int.class != Integer.class