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

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(395)   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

相关阅读

Learn about various Java 中的数据类型. Learn the differences between 原始数据类型 and non-primitive datatypes...
了解 Java 包装类,它们的用法,原语和对象之间的转换;以及带有示例的自动装箱和拆箱。 1. Java 包装类 在 Java 中,我们有 8 种原始数据类型。 Java 提供类型包装器,它们是...
Learn the basics of RSocket protocol, four possible communication models and implement those mode...
在本文中,我们将学习在 Spring boot Data JPA 应用程序中记录 SQL 语句。我们还将学习如何将 SQL 查询信息(例如参数值)打印到标准输出和文件中。 1.设置 我们将使用 ...
了解 Java 中的记录类型。它在 Java 14 中作为预览功能引入,并在稍后完成。 Java 记录应该用作不可变的 POJO,以在类和应用程序之间传输数据。 1. 什么是记录? 和张举一样,...
在上一篇文章中,我写了关于如何使用 Docker 和 Arquillian Cube 测试 Spring Data 应用程序。测试看起来像: @RunWith(SpringRunner.clas...
Java 中的所有值都分为两类:引用类型 和原始类型。了解所有 Java 中的八种基本数据类型、它们的内存大小、默认值以及最大值和最小值范围。 1. Java 原始类型 原始 数据类型 由 Ja...
Java int to String 教程展示了如何将整数转换为字符串。有几种方法可以在 Java 中执行 int 到 String 的转换。我们可以使用字符串连接、字符串格式化、字符串构建,并...
问题说明我有一个自己的图像上传逻辑。 但是当我上传图像时,我想为图像添加一个自定义属性和一个自定义class。所以我的图片上传后应该是这样的:&lt;img class="lazy-load" ...
Spring Boot Data JPA Query By Example 教程展示了如何使用 Spring Data JPA Query By Example 技术创建查询。 春天 是用于创建...