在 Java
中,每种基本数据类型都有一个对应的类。例如,int
对应于 Integer
类。其他基本数据类型也有类似的对应关系,如下表所示。这些类被称为 “包装器(Wrapper)”。包装器类的作用是对基本数据类型进行封装,并提供额外的功能。这些功能包括方法和属性,旨在支持更广泛的使用场景。通过使用包装器,我们可以更方便地处理数据,比如将基本类型转换为对象、进行集合操作等。
注意:包装器类是不可变的,一旦构造了包装器,就不允许更改包装在其中的值。同时,包装器类还是
final
类型,因此不能派生子类。
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
一、装箱与拆箱
在 Java
中,将基本数据类型转换为对应的包装器类型的过程称为“装箱”,而将包装器类型转换回基本数据类型的过程称为“拆箱”。在 JDK 5
之前,装箱和拆箱需要手动进行,这通常涉及调用 valueOf
方法。自 JDK 5
起,Java
引入了自动装箱和拆箱的特性,使得这一过程变得更加简单和方便。尽管如此,自动装箱和拆箱的底层实现仍然是调用 valueOf 方法。下面是 int
类型手动装拆箱与自动装拆箱的代码示例。
// 手动装箱
int n1 = 100;
Integer integer11 = new Integer(n1);
Integer integer12 = Integer.valueOf(n1);
// 手动拆箱
int m1 = integer11.intValue();// 自动装箱与拆箱
int n2 = 200;
Integer integer2 = n2; // 底层使用 Integer.valueOf(n2);
int m2 = integer2; // 底层使用 intValue();
注意:1)包装类引用可以为
null
,自动装箱有可能抛出异常;2)如果混合使用Integer
和Double
类型,Integer
值会先拆箱,提升为double
,再装箱为Double
;3)装箱和拆箱由编译器执行,而不是虚拟机,编译器生成类的字节码时会插入必要的方法调用,虚拟机负责执行字节码。
二、字符串转换数值
当我们需要将一个数字字符串转换为数值时,使用包装类的静态方法会非常方便。例如,要将数字字符串 s
转换为整数,可以使用 Integer.parseInt(s)
方法。其他数值类型的包装类也提供了类似的转换方法,方便我们进行不同类型的数值转换。
String s = "123456";
int x = Integer.parseInt(s);