Java中的Boxing和AutoBoxing有什么区别?

时间:2015-11-24 14:04:34

标签: java boxing

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

4 个答案:

答案 0 :(得分:11)

拳击是一种机制(即从intInteger); autoboxing是编译器的功能,它可以为您生成装箱代码。

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

// list is a List<Integer>
list.add(3);

然后编译器会自动为您生成装箱代码; &#34;最终结果&#34;在代码中将是:

list.add(Integer.valueOf(3));

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

  

如果框中的值p为true,false,则为字节或字符   范围\ u0000到\ u007f,或者在-128到127之间的int或短数   (包括),然后让r1和r2成为任意两个拳击的结果   转换p。情况总是 r1 == r2

如果您使用&#34;仅仅&#34;并且您不能强制执行此要求。构造函数。工厂方法,例如Integer.valueOf(),可以。

答案 1 :(得分:7)

根据我的理解,“Boxing”意味着“显式构建一个原始值的包装器”。例如:

int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);

同时,“Autoboxing”意味着“隐式构建原始值的包装器”。例如:

Integer x = 5;

答案 2 :(得分:0)

Autoboxing 是Java编译器在基元类型与其对应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换采用另一种方式,则称为取消装箱

ref...

答案 3 :(得分:0)

  • 取消装箱是从包装器类到基本数据类型的转换。例如。当你想要一个int时传递一个Integer。
  • Autoboxing 是从原始数据类型到其相应包装类的自动转换。例如。当你想要一个Integer对象时传递一个int。