Java 包装类

8 Mar 2025 | 6 分钟阅读

Java 包装类提供了一种机制,将基本类型转换为对象,以及将对象转换为基本类型

自 J2SE 5.0 起,自动装箱自动拆箱功能会自动将基本类型转换为对象,以及将对象转换为基本类型。基本类型自动转换为对象的转换称为自动装箱,反之则称为自动拆箱。

包装类的优点

Java 包装类相比基本数据类型提供了多种优势。包括封装、类型转换、自动装箱和拆箱以及实用方法。包装类还是线程安全的且不可变的,这使得它们非常适合多线程应用。包装类的一些优点是:

  1. 集合只允许对象数据。
  2. 对于对象数据,我们可以调用多个方法 compareTo()、equals()、toString()。
  3. 克隆过程仅限对象。
  4. 对象数据允许 null 值。
  5. 序列化只允许对象数据。

Java 包装类的重要性

  • 封装
  • 类型转换
  • 实用工具方法
  • Null 处理

Java 中包装类的使用

Java 是一种面向对象编程语言,因此我们需要多次处理对象,例如在集合、序列化、同步等场景中。让我们看看我们需要使用包装类的不同场景。

  • 在方法中更改值: Java 只支持按值传递。因此,如果我们传递一个基本类型的值,它不会改变原始值。但是,如果我们将其转换为对象,它将改变原始值。
  • 序列化: 我们需要将对象转换为流以执行序列化。如果我们有一个基本类型的值,我们可以通过包装类将其转换为对象。
  • 同步: Java 同步在多线程中与对象协同工作。
  • java.util 包: java.util 包提供了用于处理对象的实用类。
  • 集合框架: Java 集合框架仅处理对象。集合框架的所有类(ArrayList、LinkedList、Vector、HashSet、LinkedHashSet、TreeSet、PriorityQueue、ArrayDeque 等)都只处理对象。

java.lang 包中的八个类称为 Java 中的包装类。下面列出了八个包装类:

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

自动装箱

将基本数据类型自动转换为其相应的包装类称为自动装箱,例如,byte 到 Byte、char 到 Character、int 到 Integer、long 到 Long、float 到 Float、boolean 到 Boolean、double 到 Double 和 short 到 Short。

自 Java 5 以来,我们无需使用包装类的 valueOf() 方法即可将基本类型转换为对象。

包装类示例:基本类型到包装类

示例

输出

20 20 20

拆箱

将包装类型自动转换为其相应的基本类型称为自动拆箱。它是自动装箱的逆过程。自 Java 5 以来,我们无需使用包装类的 intValue() 方法即可将包装类型转换为基本类型。

包装类示例:包装类到基本类型

文件名:WrapperExample2.java

输出

3 3 3

Java 包装类示例

文件名:WrapperExample3.java

输出

---Printing object values---
Byte object: 10
Short object: 20
Integer object: 30
Long object: 40
Float object: 50.0
Double object: 60.0
Character object: a
Boolean object: true
---Printing primitive values---
byte value: 10
short value: 20
int value: 30
long value: 40
float value: 50.0
double value: 60.0
char value: a
boolean value: true

自定义 Java 包装类

Java 包装类包装基本数据类型,因此称为包装类。我们也可以创建包装基本数据类型的类。因此,我们可以创建自定义的 Java 包装类。

文件名:TestJavatpoint.java

输出

10

Java 包装类与基本类型的注意事项

讨论内存使用、性能等注意事项,以及何时选择其中一种而不是另一种。

包装类原始类型

注意事项

内存使用

由于缺乏开销,高

性能适中

高,因为指令较少

何时使用当需要封装或与复杂 API 配合使用时

当性能和内存是主要关注点时

安全性

低,因为基本类型不是不可变的

线程安全是的

不能


Java 包装类选择题

1) 以下哪种方法可以创建值为 10 的 Integer 对象?

  1. Integer val = new Integer(10);
  2. Integer val = Integer.valueOf(10);
  3. Integer val = 10;
  4. int val = 10;
 

答案:b)

解释: Integer 类的 valueOf() 方法是一个静态工厂方法,用于创建具有指定值的 Integer 对象。


2) Integer 包装类中的 intValue() 方法的目的是什么?

  1. 它将 Integer 对象的值作为 int 基本类型返回。
  2. 它返回 Integer 对象的哈希码。
  3. 它比较两个 Integer 对象是否相等。
  4. 它将 Integer 对象转换为其二进制表示。
 

答案:a)

解释: intValue() 方法将 Integer 对象的值作为 int 基本数据类型返回。


3) Java 中包装类对象可用的常量字段是什么?

  1. BYTES, SIZE
  2. MAX_VALUE, MAX_EXPONENT
  3. MIN_VALUE, MIN_EXPONENT
  4. 以上全部
 

答案:d)

解释: 上述常量仅适用于非布尔型包装类。MIN_EXPONENT 和 MAX_EXPONENT 仅适用于 Float 和 Double。


4) Java 中的自动装箱有什么作用?

  1. 将对象转换为其相应的基本数据类型。
  2. 将基本数据类型转换为其相应的对象。
  3. 在不同类型的包装类之间进行转换。
  4. 将字符串转换为其数字等效值。
 

答案:b)

解释: 自动装箱是基本数据类型到其相应包装类的自动转换。


5) 以下哪个方法可用于将数字的字符串表示形式解析为其相应基本数据类型?

  1. Integer.parseInt()
  2. Integer.valueOf()
  3. Integer.intValue()
  4. Integer.parse()
 

答案:a)

解释: Integer 类的 parseInt() 方法将整数的字符串表示形式解析为其相应基本数据类型。