Java中装箱和自动装箱的区别是什么?

Java中装箱和自动装箱的区别是什么?,java,boxing,Java,Boxing,Java中装箱和自动装箱的区别是什么?一些Java认证书使用了两个这样的术语。它们指的是装箱吗?在我的理解中,“装箱”的意思是“围绕一个基本值显式地构造一个包装器”。例如: int x = 5; Integer y = new Integer(x); //or Integer.valueOf(x); Integer x = 5; 同时,“自动装箱”意味着“围绕原始值隐式构造包装器”。例如: int x = 5; Integer y = new Integer(x); //or Integer

Java中装箱和自动装箱的区别是什么?一些Java认证书使用了两个这样的术语。它们指的是装箱吗?

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

int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);
Integer x = 5;
同时,“自动装箱”意味着“围绕原始值隐式构造包装器”。例如:

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

自动装箱是Java编译器在原语类型与其对应的对象包装器类之间进行的自动转换。例如,将int转换为整数,将double转换为double,等等。如果转换方向相反,则称为取消装箱

装箱是一种机制(即从
int
Integer
);自动装箱是编译器的一项功能,通过它可以为您生成装箱代码

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

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

关于为什么
Integer.valueOf()
而不是
newinteger()
:基本上,因为JLS这么说:)引用:

如果要装箱的值p为true、false、字节或 范围从\u0000到\u007f,或介于-128和127之间的整数或短数 (包括),然后让r1和r2为任意两个装箱的结果 p。通常情况下,r1==r2

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

  • 取消装箱是从包装类到原始数据类型的转换。当你传递一个整数时,应该是int
  • 自动装箱是从原始数据类型到相应包装类的自动转换。当你传递一个整数时,你需要一个整数对象

这是拆箱,不是Boxing@UUIIUI有both@Tunaki嗯,不一定。这可以被视为装箱:
Integer i=新整数(1)和此自动装箱
整数i=1。然而,这只是不相关的语义。自动装箱是自动装箱,对吗?您可以使用
Integer.valueOf
手动装箱
int
,也可以将
int
值指定给
Integer
变量,该变量将自动装箱。@uuiui:不,装箱时主要称为装箱,装箱时称为取消装箱。增量也不主要称为减量。