我正在审查java角色的原始类型面试问题。我在测试期间被问到这样的陈述。
原始类型是不从java.lang.Object继承的任何类型。
答案 0 :(得分:2)
还有其他类型不扩展java.lang.Object
。例如,null
是一个值,因此它不会扩展它。虽然抽象类没有扩展,但接口也没有扩展它。
关于原始类型,答案是肯定而不是。当你编写它们时,原始类型不会从java.lang.Object
继承。但是,在将java代码编译为java字节码时,编译器会执行名为autoboxing的内容。
简而言之,在编译时,编译器将所有原始值转换为它们的包装类(对于int为Integer
,对于boolean为Boolean
等)。但是,他有效地做到了这一点,因为它将int i = 0;
转换为Integer i = Integer.valueOf(0);
。在幕后,包装类型的valueOf
函数是一个Flyweight Factory,它最多只有一个Integer 0的实例,一个整数1等...
因此,编码时使用基本类型,但JVM使用基本类型的包装器,它实现java.lang.Object
。
答案 1 :(得分:1)
不,他们不是。接口也不会继承自java.lang.Object