Java 中的装箱和自动装箱有什么区别?
What is the difference between Boxing and AutoBoxing in Java?
Java中装箱和自动装箱有什么区别?有几本 Java 认证书籍使用了两个这样的术语。他们指的是拳击吗?
在我的理解中,"Boxing"表示"explicitly constructing a wrapper around a primitive value"。例如:
int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);
同时,"Autoboxing"表示"implicitly constructing a wrapper around a primitive value"。例如:
Integer x = 5;
Autoboxing 是 Java 编译器在原始类型和它们对应的对象包装器 类 之间进行的自动转换。例如,将 int 转换为 Integer,将 double 转换为 Double,等等。如果转换以另一种方式进行,则称为 拆箱。
装箱是机制(即从int
到Integer
);自动装箱是编译器的一项功能,它可以为您生成装箱代码。
例如,如果你写代码:
// list is a List<Integer>
list.add(3);
然后编译器自动为你生成装箱代码;代码中的 "end result" 将是:
list.add(Integer.valueOf(3));
关于为什么 Integer.valueOf()
而不是 new Integer()
的说明:基本上,因为 JLS 这么说 :) 引用 section 5.1.7:
If the value p being boxed is true, false, a byte, or a char in the
range \u0000 to \u007f, or an int or short number between -128 and 127
(inclusive), then let r1 and r2 be the results of any two boxing
conversions of p. It is always the case that r1 == r2.
如果您使用 "mere" 构造函数,则无法强制执行此要求。一个工厂方法,比如Integer.valueOf()
,可以。
- 拆箱是从wrapper-class到原始数据类型的转换。例如。当你传递一个整数而期望一个整数时。
- 自动装箱 是从原始数据类型自动转换为相应的包装器-class。例如。当您传递一个 int 而期望一个 Integer 对象时。
Java中装箱和自动装箱有什么区别?有几本 Java 认证书籍使用了两个这样的术语。他们指的是拳击吗?
在我的理解中,"Boxing"表示"explicitly constructing a wrapper around a primitive value"。例如:
int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);
同时,"Autoboxing"表示"implicitly constructing a wrapper around a primitive value"。例如:
Integer x = 5;
Autoboxing 是 Java 编译器在原始类型和它们对应的对象包装器 类 之间进行的自动转换。例如,将 int 转换为 Integer,将 double 转换为 Double,等等。如果转换以另一种方式进行,则称为 拆箱。
装箱是机制(即从int
到Integer
);自动装箱是编译器的一项功能,它可以为您生成装箱代码。
例如,如果你写代码:
// list is a List<Integer>
list.add(3);
然后编译器自动为你生成装箱代码;代码中的 "end result" 将是:
list.add(Integer.valueOf(3));
关于为什么 Integer.valueOf()
而不是 new Integer()
的说明:基本上,因为 JLS 这么说 :) 引用 section 5.1.7:
If the value p being boxed is true, false, a byte, or a char in the range \u0000 to \u007f, or an int or short number between -128 and 127 (inclusive), then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
如果您使用 "mere" 构造函数,则无法强制执行此要求。一个工厂方法,比如Integer.valueOf()
,可以。
- 拆箱是从wrapper-class到原始数据类型的转换。例如。当你传递一个整数而期望一个整数时。
- 自动装箱 是从原始数据类型自动转换为相应的包装器-class。例如。当您传递一个 int 而期望一个 Integer 对象时。