对象obj=true;但是Java说obj是布尔的



我正在努力了解java解释对象类型的方式。

我的意思是:

@Test
void checkObj() {
// Output: INFO: Obj true is of type class java.lang.Boolean
Object obj = true;
log.info("Obj {} is of type {}", new Object[] {obj, obj.getClass()});
}

obj已经被声明为类型Object,并且我们知道true是类型Boolean,对吧?那么,当我们将true分配给obj时,为什么java告诉我们objBoolean类型,而不是告诉我们它是Object类型?

我已经研究了BooleanObject的源代码实现。Object不是接口,Boolean也没有扩展或实现Object,因此多态性是不可能的,那么两者之间的联系在哪里?

Boolean的源代码开头是这样的:

public final class Boolean implements Serializable, Comparable<Boolean> { // ...

Object的源代码是这样开始的:

public class Object { // ...

就肉眼所见,ObjectBoolean之间没有直接联系。

您在哪里看到Boolean不扩展Object

https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html

定义的前几行:

public final class Boolean extends Object implements Serializable, Comparable<Boolean>

您正在为Object指定一个布尔基元,然后将其自动框入布尔对象。

最新更新