Java中的Boxing和AutoBoxing有什么区别?一些Java认证书使用了两个这样的术语。他们是指与Boxing相同的东西吗?
答案 0 :(得分:11)
拳击是一种机制(即从int
到Integer
); 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,依此类推。如果转换采用另一种方式,则称为取消装箱。
答案 3 :(得分:0)