我正在努力了解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
告诉我们obj
是Boolean
类型,而不是告诉我们它是Object
类型?
我已经研究了Boolean
和Object
的源代码实现。Object
不是接口,Boolean
也没有扩展或实现Object
,因此多态性是不可能的,那么两者之间的联系在哪里?
Boolean
的源代码开头是这样的:
public final class Boolean implements Serializable, Comparable<Boolean> { // ...
Object
的源代码是这样开始的:
public class Object { // ...
就肉眼所见,Object
和Boolean
之间没有直接联系。
您在哪里看到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指定一个布尔基元,然后将其自动框入布尔对象。