原始类型只是不从 java.lang.Object 继承的类型吗?

Are primitive types only types not inherited from java.lang.Object?

我正在复习 java 角色的原始类型面试问题。我在测试中被问到这样的陈述。

原始类型是任何不继承自 java.lang.Object 的类型。

不,他们不是。接口也不继承自 java.lang.Object

还有其他类型不扩展 java.lang.Object。例如,null 是一个值,因此不会对其进行扩展。接口也不扩展它,尽管 abstract class 可以。

关于原始类型,答案是肯定的,也不是。当您编写它们时,原始类型不会继承自 java.lang.Object。但是,当将 java 代码编译为 java 字节码时,编译器会执行一些名为 autoboxing.

的操作

简而言之,在编译时,编译器将所有原始值转换为它们的包装器 class(Integer 表示 int,Boolean 表示布尔值,等等)。然而,他这样做效率很高,因为它将 int i = 0; 转换为 Integer i = Integer.valueOf(0);。在幕后,包装器类型的 valueOf 函数是享元工厂,即最多有一个 Integer 0 实例,一个 Integer 1 实例,等等...

因此,在编码时您使用原始类型,但 JVM 使用原始类型的包装器,它实现 java.lang.Object.