Autoboxing不包装

时间:2017-07-22 14:42:33

标签: java autoboxing

Object a = 3;
System.out.println(a.getClass().getName());

为什么a现在是整数?为什么不兼容类型编译错误? Java教程明确指出:

  

Autoboxing是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。

为什么选择Java autobox' 3'在这种情况下整数?

2 个答案:

答案 0 :(得分:2)

我认为没有任何理由存在编译错误。一旦原始类型3在这种情况下被自动装箱到其包装类型Integer,就不应该有任何编译错误,因为Integer隐式继承自Object,这意味着您可以轻松地将Integer类型的任何对象分配到Object类型。

  

我不明白为什么原始类型'3'被自动装箱到它的包装器上   输入整数。

必须自动装箱,否则,您无法将基本类型分配给类型Object。由于接收类型是类型Object引用类型),因此原语类型必须自动装箱以使其兼容。因此,您可以将引用类型分配给引用类型。

答案 1 :(得分:2)

这适用于您遇到的大多数其他对象;只要两个对象之间有共同的祖先,就可以将它们分配给另一个。这被称为is-a,因其回答的问题而得名。 Integer Object

Autoboxing只需要一个原始类型并将其转换为自身的对象包装表示。没有信息丢失,编译器正在将基元强制转换为Object。因此,您的作业是合法的。

如果不是两个对象之间的直接关系,那么您将收到编译错误。

例如:

String a = 3;

...会导致编译错误,因为无法将Integer分配给String

You may peruse other autoboxing rules here,但还有一件事:所有非十进制数字都被假定为int,除非它们后缀为Ll,在这种情况下, 're long