首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中Boxing和AutoBoxing有什么区别?

在Java中Boxing和AutoBoxing有什么区别?
EN

Stack Overflow用户
提问于 2015-11-24 14:04:33
回答 4查看 5.9K关注 0票数 7

在Java中Boxing和AutoBoxing有什么区别?有几本Java认证书使用了两个这样的术语。他们指的是同样的东西吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-24 14:08:41

装箱是一种机制(即从intInteger);自动装箱是编译器的特性,它通过它为您生成装箱代码。

例如,如果您用代码编写:

代码语言:javascript
复制
// list is a List<Integer>
list.add(3);

然后编译器会自动为您生成装箱代码;代码中的“最终结果”将是:

代码语言:javascript
复制
list.add(Integer.valueOf(3));

关于为什么是Integer.valueOf()而不是new Integer()的说明:基本上,因为JLS这样说:)引用第5.1.7节

如果被装箱的值p为真、假、字节或在\u0000至\u007f范围内的一个字符,或介于-128至127 (包括)之间的int或短数,则让r1和r2是p的任意两次装箱转换的结果。r1 == r2总是这样。

如果使用“纯粹”构造函数,则不能强制执行此要求。一种工厂方法,如Integer.valueOf(),可以。

票数 14
EN

Stack Overflow用户

发布于 2015-11-24 14:07:11

在我的理解中,"Boxing“的意思是”显式地围绕一个原始值构造一个包装器“。例如:

代码语言:javascript
复制
int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);

同时,“自动装箱”意味着“隐式地围绕一个原始值构造一个包装器”。例如:

代码语言:javascript
复制
Integer x = 5;
票数 7
EN

Stack Overflow用户

发布于 2015-11-24 14:08:02

自动装箱是编译器在原语类型和它们相应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换是相反的,则称为取消装箱

来源

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

https://stackoverflow.com/questions/33895700

复制
相关文章

相似问题

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