在Java中Boxing和AutoBoxing有什么区别?有几本Java认证书使用了两个这样的术语。他们指的是同样的东西吗?
发布于 2015-11-24 14:08:41
装箱是一种机制(即从int到Integer);自动装箱是编译器的特性,它通过它为您生成装箱代码。
例如,如果您用代码编写:
// list is a List<Integer>
list.add(3);然后编译器会自动为您生成装箱代码;代码中的“最终结果”将是:
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(),可以。
发布于 2015-11-24 14:07:11
在我的理解中,"Boxing“的意思是”显式地围绕一个原始值构造一个包装器“。例如:
int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);同时,“自动装箱”意味着“隐式地围绕一个原始值构造一个包装器”。例如:
Integer x = 5;发布于 2015-11-24 14:08:02
自动装箱是编译器在原语类型和它们相应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换是相反的,则称为取消装箱。
https://stackoverflow.com/questions/33895700
复制相似问题