Java 包装器类、自动装箱和拆箱

位置:首页>文章>详情   分类:Java教程   阅读(243)   2023-06-26 07:54:18

了解 Java 包装类,它们的用法,原语和对象之间的转换;以及带有示例的自动装箱和拆箱。

1. Java 包装类

在 Java 中,我们有 8 种原始数据类型。 Java 提供类型包装器,它们是将基本类型封装在对象中的类。

  • 包装器类包装(封装)原始数据类型并赋予其对象外观。只要原始数据类型需要作为对象类型,就可以使用这种类型包装器。
  • 包装类包括解包对象和返回数据类型的方法。
  • type wrappers 类是 java.lang 包的一部分。
  • 每个基本类型都有一个对应的包装类。

<表> <正文> 原始类型 包装类 双 双 浮动 浮动 长 长 整数 整数 短 简短 字节 字节 字符 字符 布尔值 布尔值

2. 何时使用包装类

Java 包装类用于场景 –

  • 当两个方法想要引用原始类型的同一个实例时,将包装类作为方法参数传递。
  • Java 泛型仅适用于对象类型,不支持原始类型。
  • Java 集合只处理对象;要将原始类型存储在其中一个类中,您需要将原始类型包装在一个类中。
  • 当您想从数据类型中引用null 时,您需要对象。 基元不能将 null 作为值。

3.转换

3.1.将原始类型转换为包装类

有两种方法可以将原始类型转换为相应包装类的实例——

  1. 使用构造函数
  2. 使用静态工厂方法
// 1. using constructor
Integer object = new Integer(10);

// 2. using static factory method
Integer anotherObject = Integer.valueOf(10);

在上面的示例中,valueOf() 方法是一个静态工厂方法,它返回表示指定 int 值的 Integer 类的实例。

同样,我们可以将其他原始类型如 boolean 转换为 Boolean,将 char 转换为 Charactershort Short 等。

Java 包装器类使用内部缓存 返回内部缓存值达到一个限制。这种实例的内部缓存使包装类在性能和内存统一化方面更加高效。

3.2.将包装类转换为原始类型

从包装类转换为原始类型很简单。我们可以使用相应的实例方法来获取原始类型。例如intValue(), doubleValue(), shortValue()

Integer object = new Integer(10);

int val = object.intValue();	//wrapper to primitive

4. 自动装箱和拆箱

从 JDK 5 开始,Java 添加了两个重要特性:

  • 自动装箱
  • 自动拆箱

4.1.自动装箱

自动装箱是将基本类型自动转换为相应的包装类

例如,将 int 转换为 Integer,将 char 转换为 Character,等等。

我们可以简单地将原始类型传递或分配给接受包装类类型的参数或引用。

Java 自动装箱示例

List<Integer> integerList = new ArrayList<>();

for (int i = 1; i < 10; i ++)
{
    integerList.add(i);		//int to Integer
}

在给定的示例中,integerListIntegerList。它不是原始类型 int 值的列表。

这里编译器自动从 int 创建一个 Integer 对象,并将该对象添加到 integerList。因此,之前的代码在运行时变成如下:

List<Integer> integerList = new ArrayList<>();

for (int i = 1; i < 10; i ++)
{
      integerList.add(Integer.valueOf(i));		//autoboxing
}

4.2.开箱

拆箱 发生在从包装类到其对应的基本类型的转换时。这意味着我们可以将包装器对象传递或分配给接受原始类型的参数或引用。

Java 拆箱示例
public static int sumOfEven(List<Integer> integerList)
{
    int sum = 0;
    for (Integer i: integerList) {
    	if (i % 2 == 0)
            sum += i;			//Integer to int
    }
    return sum;
}

在上面的示例中,余数 (%) 和一元加号 (+=) 运算符 不适用于 Integer 对象。编译器通过调用 intValue() 方法在运行时自动将 Integer 转换为 int。

自动装箱和拆箱让开发人员编写更简洁的代码,使其更易于阅读。

快乐学习!!

地址:https://www.cundage.com/article/java-wrapper-classes.html