我正在复习 Java 角色的原始类型面试问题。我在测试中被问到这样的陈述。
原始类型是任何不继承自 java.lang.Object 的类型。
最佳答案
还有其他类型不扩展java.lang.Object
。例如,null
是一个值,因此它不会扩展它。接口(interface)也不扩展它,但抽象类可以。
关于原始类型,答案是肯定的,也不是。当您编写它们时,基本类型不会继承自 java.lang.Object
。但是,当将 java 代码编译为 java 字节码时,编译器会执行称为 autoboxing 的操作。 .
简而言之,在编译时,编译器将所有原始值转换为它们的包装类(Integer
用于 int,Boolean
用于 boolean,等等)。但是,他这样做效率很高,因为它将 int i = 0;
转换为 Integer i = Integer.valueOf(0);
。在幕后,包装器类型的 valueOf
函数是享元工厂,即最多有一个 Integer 0 实例,一个 Integer 1 实例,等等...
因此,在编码时您使用原始类型,但 JVM 使用原始类型的包装器,它实现了 java.lang.Object
。
关于java - 原始类型只是不从 java.lang.Object 继承的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37376821/