跳到主要内容

Java 包装类

提示
  1. 基本概念:Java 包装类将八种原始数据类型(如 int, double)转换为相应的对象,如 Integer, Double
  2. 类型转换:通过 valueOf() 方法或自动装箱,原始类型可以转换为包装对象;通过 intValue(), doubleValue() 方法或自动拆箱,包装对象可以转换回原始类型。
  3. 使用场景和优势:包装类允许原始数据类型作为对象使用,如在集合中或存储 null 值。不过,原始类型的性能通常优于包装类。

Java 中的包装类用于将原始类型(intcharfloat 等)转换为相应的对象。

8 种原始类型都有对应的包装类。

原始类型包装类
byteByte
booleanBoolean
charCharacter
doubleDouble
floatFloat
intInteger
longLong
shortShort

将原始类型转换为包装对象

我们也可以使用 valueOf() 方法将原始类型转换为对应的对象。

示例 1:原始类型转换为包装对象

class Main {
public static void main(String[] args) {

// 创建原始类型
int a = 5;
double b = 5.65;

// 转换为包装对象
Integer aObj = Integer.valueOf(a);
Double bObj = Double.valueOf(b);

if(aObj instanceof Integer) {
System.out.println("创建了一个 Integer 对象。");
}

if(bObj instanceof Double) {
System.out.println("创建了一个 Double 对象。");
}
}
}

输出

创建了一个 Integer 对象。
创建了一个 Double 对象。

在上面的示例中,我们使用了 valueOf() 方法将原始类型转换为对象。

这里,我们使用了 instanceof 运算符来检查生成的对象是否为 IntegerDouble 类型。

然而,Java 编译器可以直接将原始类型转换为对应的对象。例如,

int a = 5;
// 转换为对象
Integer aObj = a;

double b = 5.6;
// 转换为对象
Double bObj = b;

这个过程称为 自动装箱。要了解更多,请访问 Java 自动装箱和拆箱

注意:我们也可以使用 Wrapper 类构造器将原始类型转换为包装对象。但在 Java 9 之后,使用构造器已被弃用。

将包装对象转换为原始类型

要将对象转换为原始类型,我们可以使用每个包装类中存在的相应值方法(intValue()doubleValue() 等)。

示例 2:包装对象转换为原始类型

class Main {
public static void main(String[] args) {

// 创建包装类对象
Integer aObj = Integer.valueOf(23);
Double bObj = Double.valueOf(5.55);

// 转换为原始类型
int a = aObj.intValue();
double b = bObj.doubleValue();

System.out.println("a 的值: " + a);
System.out.println("b 的值: " + b);
}
}

输出

a 的值: 23
b 的值: 5.55

在上面的示例中,我们使用了 intValue()doubleValue() 方法将 IntegerDouble 对象转换为对应的原始类型。

然而,Java 编译器可以自动将对象转换为相应的原始类型。例如,

Integer aObj = Integer.valueOf(2);
// 转换为 int 类型
int a = aObj;

Double bObj = Double.valueOf(5.55);
// 转换为 double 类型
double b = bObj;

这个过程称为 拆箱。要了解更多,请访问 Java 自动装箱和拆箱

包装类的优势

  • 在 Java 中,有时我们可能需要使用对象而不是原始数据类型。例如,在使用集合时。
// 错误
ArrayList<int> list = new ArrayList<>();

// 正确
ArrayList<Integer> list = new ArrayList<>();

在这种情况下,包装类帮助

我们将原始数据类型用作对象。

  • 我们可以在包装对象中存储 null 值。例如,

// 会产生错误
int a = null;

// 正确
Integer a = null;

注意:原始类型比相应的对象更高效。因此,当效率是要求时,始终推荐使用原始类型。