首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动装箱不包装

自动装箱不包装
EN

Stack Overflow用户
提问于 2017-07-22 14:42:33
回答 2查看 108关注 0票数 1
代码语言:javascript
复制
Object a = 3;
System.out.println(a.getClass().getName());

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

自动装箱是Java编译器在基本类型和它们对应的对象包装类之间进行的自动转换。

为什么在这种情况下Java自动箱'3‘到Integer?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-22 15:13:00

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

自动装箱只需接受基本类型并将其转换为自身的对象包装器表示形式。没有丢失任何信息,编译器正在胁迫一个原语,使其成为一个Object。因此,你的任务是合法的。

如果这两个对象之间没有直接关系,那么您将得到一个编译错误。

例如:

代码语言:javascript
复制
String a = 3;

...would会导致编译错误,因为Integer不能分配给String

您可以在这里阅读其他自动装箱规则。,但还有一件事:所有非十进制数都被假定为int,除非它们以Ll作为后缀,在这种情况下,它们是long

票数 2
EN

Stack Overflow用户

发布于 2017-07-22 14:47:05

我不认为有任何理由应该有一个编译错误。在本例中,原语类型3自动装箱到包装器类型Integer后,不应该出现任何编译错误,因为Integer隐式地从Object继承,这意味着您可以轻松地将Integer类型的任何对象分配给Object类型。

我不明白原语类型'3‘为什么会自动装箱到包装器类型Integer。

它必须是自动装箱的,否则,您就不能将基元类型分配给类型Object。由于接收类型是类型Object (引用类型),所以必须自动封装原语类型以使其兼容。因此,可以将引用类型分配给引用类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45255768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档