Java 包装类
提示
- 基本概念:Java 包装类将八种原始数据类型(如
int
,double
)转换为相应的对象,如Integer
,Double
。 - 类型转换:通过
valueOf()
方法或自动装箱,原始类型可以转换为包装对象;通过intValue()
,doubleValue()
方法或自动拆箱,包装对象可以转换回原始类型。 - 使用场景和优势:包装类允许原始数据类型作为对象使用,如在集合中或存储
null
值。不过,原始类型的性能通常优于包装类。
Java 中的包装类用于将原始类型(int
、char
、float
等)转换为相应的对象。
8 种原始类型都有对应的包装类。
原始类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
char | Character |
double | Double |
float | Float |
int | Integer |
long | Long |
short | Short |
将原始类型转换为包装对象
我们也可以使用 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
运算符来检查生成的对象是否为 Integer
或 Double
类型。
然而,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()
方法将 Integer
和 Double
对象转换为对应的原始类型。
然而,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;
注意:原始类型比相应的对象更高效。因此,当效率是要求时,始终推荐使用原始类型。