首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动装箱-这两行的区别?

自动装箱-这两行的区别?
EN

Stack Overflow用户
提问于 2013-09-22 14:42:24
回答 1查看 164关注 0票数 3

我想知道两者之间的区别:

代码语言:javascript
复制
Integer I = 30;  // is it autoboxing?

Integer I = new Integer(30);  // I know it is autoboxing
EN

回答 1

Stack Overflow用户

发布于 2013-09-22 15:00:29

在你写的第一行

代码语言:javascript
复制
Integer I = 30;

在第一次查看时,您将一个整数(没有显式后缀类型的所有数字文本都视为整数)分配给一个对象,您认为编译器应该抱怨不兼容的类型。但事实并非如此,这就是魔法发生的地方-> auto boxing!编译器自动将整数30放入对象I中,即创建一个保存整数值30的对象,并将其分配给您的引用。

排在队伍里

代码语言:javascript
复制
Integer I = new Integer(30);

您可以显式地使用new创建对象。这样就不会给编译器留下任何机会去做任何事情。实际上,是什么让我们确信这是auto boxing

除此之外,jvm还缓存一系列常量的值,以最小化用于这些常量的内存,从而提高性能。要使用此特性,您应该使用valueOf()方法获取此类对象的实例。在这种情况下,对于相同的整数值,将返回一个唯一对象。如果使用new创建它,那么对于相同的常量,每次都会得到不同的对象。

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

https://stackoverflow.com/questions/18944999

复制
相关文章

相似问题

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