了解 Java 包装类,它们的用法,原语和对象之间的转换;以及带有示例的自动装箱和拆箱。
在 Java 中,我们有 8 种原始数据类型。 Java 提供类型包装器,它们是将基本类型封装在对象中的类。
<表> <正文> 原始类型 包装类 双 双 浮动 浮动 长 长 整数 整数 短 简短 字节 字节 字符 字符 布尔值 布尔值
Java 包装类用于场景 –
null
时,您需要对象。 基元不能将 null
作为值。有两种方法可以将原始类型转换为相应包装类的实例——
// 1. using constructor
Integer object = new Integer(10);
// 2. using static factory method
Integer anotherObject = Integer.valueOf(10);
在上面的示例中,valueOf() 方法是一个静态工厂方法,它返回表示指定 int
值的 Integer
类的实例。
同样,我们可以将其他原始类型如 boolean
转换为 Boolean
,将 char
转换为 Character
,short
到 Short
等。
Java 包装器类使用内部缓存 返回内部缓存值达到一个限制。这种实例的内部缓存使包装类在性能和内存统一化方面更加高效。
从包装类转换为原始类型很简单。我们可以使用相应的实例方法来获取原始类型。例如intValue(), doubleValue(), shortValue() 等
Integer object = new Integer(10);
int val = object.intValue(); //wrapper to primitive
从 JDK 5 开始,Java 添加了两个重要特性:
自动装箱是将基本类型自动转换为相应的包装类。
例如,将 int
转换为 Integer
,将 char
转换为 Character
,等等。
我们可以简单地将原始类型传递或分配给接受包装类类型的参数或引用。
List<Integer> integerList = new ArrayList<>();
for (int i = 1; i < 10; i ++)
{
integerList.add(i); //int to Integer
}
在给定的示例中,integerList
是 Integer
的 List
。它不是原始类型 int 值的列表。
这里编译器自动从 int
创建一个 Integer
对象,并将该对象添加到 integerList
。因此,之前的代码在运行时变成如下:
List<Integer> integerList = new ArrayList<>();
for (int i = 1; i < 10; i ++)
{
integerList.add(Integer.valueOf(i)); //autoboxing
}
拆箱 发生在从包装类到其对应的基本类型的转换时。这意味着我们可以将包装器对象传递或分配给接受原始类型的参数或引用。
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