Java 包装类

Java 包装类

一、引言

在 Java 编程中,数据类型的使用是基础且关键的部分。Java 既有基本数据类型,又有引用数据类型。为了让基本数据类型也能具备对象的特性,以更好地融入面向对象的编程思想,Java 引入了包装类的概念。本文将全面介绍 Java 包装类,包括其定义、存在的意义、具体的包装类类型、常用方法和常量,以及装箱和拆箱操作。

二、什么是包装类

Java 有 8 种基本数据类型,为了能将这些基本数据类型当作对象来使用,Java 为每个基本类型都提供了对应的包装类。包装类可以分为 3 大类:Number、Character、Boolean。

三、为什么需要包装类

Java 是一门面向对象的编程语言,但为了降低开发者的上手难度,它沿用了 C 语言的基本数据类型,因此 Java 的数据类型被分为基本数据类型和引用数据类型。

在进行简单运算时,开发者可以直接使用基本数据类型。然而,在一些需要对象化交互的场景中,比如将基本数据类型存入集合中,基本数据类型就显得力不从心了。因为基本数据类型不具备对象的特征,没有对象的属性和方法,也无法运用面向对象的编程思想来组织代码。而包装类作为类,拥有属性和方法,能够很好地实现对象化交互,这就是包装类存在的意义。

四、基本数据类型与包装类

Java 中基本数据类型对应的包装类如下表所示,这些包装类都位于 java.lang 包下,使用时无需手动引入。

基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

除了 int 对应的包装类名称为 Integer 以及 char 对应的包装类名称为 Character 外,其他 6 种数据类型对应的包装类,命名均为其基本数据类型首字母的大写。

五、包装类常用方法

(一)Number 类

Number 类是所有数值类型包装类的父类,下面以其子类 Integer 类为例,介绍其构造方法、常用方法以及常量。

1. 构造方法
  • Integer(int value):以 int 型变量作为参数创建 Integer 对象。
  • Integer(String s):以 String 型变量作为参数创建 Integer 对象。

示例代码:

// 以 int 型变量作为参数创建 Integer 对象
Integer num1 = new Integer(3);
// 以 String 型变量作为参数创建 Integer 对象
Integer num2 = new Integer("8");
2. 常用方法
  • byte byteValue():以 byte 类型返回该 Integer 的值。
  • int compareTo(Integer anotherInteger):在数值上比较两个 Integer 对象。若两个值相等,则返回 0;若调用对象的数值小于 anotherInteger 的数值,则返回负值;若调用对象的数值大于 anotherInteger 的数值,则返回正值。
  • boolean equals(Object obj):比较此对象与指定对象是否相等。
  • int intValue():以 int 类型返回此 Integer 对象。
  • int shortValue():以 short 类型返回此 Integer 对象。
  • toString():返回一个表示该 Integer 值的 String 对象。
  • static Integer valueOf(String str):返回保存指定的 String 值的 Integer 对象。
  • int parseInt(String str):返回包含在由 str 指定的字符串中的数字的等价整数值。

更多常用方法请查阅官方文档。

3. 常用常量
  • MAX_VALUE:表示 int 型可取的最大值。
  • MIN_VALUE:表示 int 型可取的最小值。
  • SIZE:表示以二进制补码形式表示 int 值的位数。
  • TYPE:表示基本类型 Class 实例。

示例代码:

public class WrapperClassDemo1 {
    public static void main(String[] args) {
        int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        int size = Integer.SIZE;
        System.out.println("int 类型可取的最大值: " + maxValue);
        System.out.println("int 类型可取的最小值: " + minValue);
        System.out.println("int 类型的二进制位数: " + size);
    }
}

运行结果:

int 类型可取的最大值: 2147483647
int 类型可取的最小值: -2147483648
int 类型的二进制位数: 32

(二)Character 类

Character 类用于在对象中包装一个基本类型为 char 的值,一个 Character 对象包含类型为 char 的单个字段。

1. 构造方法

Character(char value):该构造方法很少使用。

2. 常用方法
  • char charValue():返回此 Character 对象的值。
  • int compareTo(Character anotherCharacter):根据数字比较两个 Character 对象,若两个对象相等则返回 0。
  • boolean equals(Object obj):将调用该方法的对象与指定的对象相比较。
  • char toUpperCase(char ch):将字符参数转换为大写。
  • char toLowerCase(char ch):将字符参数转换为小写。
  • String toString():返回一个表示指定 char 值的 String 对象。
  • boolean isUpperCase(char ch):判断指定字符是否是大写字符。
  • boolean isLowerCase(char ch):判断指定字符是否是小写字符。

更多常用方法请查阅官方文档。

(三)Boolean 类

Boolean 类将基本类型为 boolean 的值包装在一个对象中,一个 Boolean 类型的对象只包含一个类型为 boolean 的字段。此外,此类还为 boolean 和 String 的相互转换提供了许多方法,并提供了处理 boolean 时非常有用的其他一些常量和方法。

1. 构造方法
  • Boolean(boolean value):创建一个表示 value 参数的 boolean 对象(很少使用)。
  • Boolean(String s):以 String 变量作为参数,创建 boolean 对象。若传入的字符串不为 null,且忽略大小写后的内容等于 “true”,则生成 Boolean 对象值为 true,反之为 false(很少使用)。
2. 常用方法
  • boolean booleanValue():将 Boolean 对象的值以对应的 boolean 值返回。
  • boolean equals(Object obj):判断调用该方法的对象与 obj 是否相等,当且仅当参数不是 null,而且与调用该方法的对象一样都表示同一个 boolean 值的 Boolean 对象时,才返回 true。
  • boolean parseBoolean(String s):将字符串参数解析为 boolean 值。
  • String toString():返回表示该 boolean 值的 String 对象。
  • boolean valueOf(String s):返回一个用指定的字符串表示值的 boolean 值。

更多常用方法请查阅官方文档。

3. 常用常量
  • TRUE:对应基值 true 的 Boolean 对象。
  • FALSE:对应基值 false 的 Boolean 对象。
  • TYPE:表示基本类型 Class 实例。

六、装箱和拆箱

装箱是指将基本数据类型转换为包装类,拆箱则是将包装类转换为基本数据类型。装箱和拆箱又可分为自动和手动两种方式。

(一)装箱示例

public class WrapperClassDemo2 {
    public static void main(String[] args) {
        // 自动装箱
        int num1 = 19;
        Integer num2 = num1;
        System.out.println("num2 = " + num2);

        // 手动装箱(在 Java 14 中已过时,不推荐使用)
        Integer num3 = new Integer(20);
        System.out.println("num3 = " + num3);
    }
}

运行结果:

num2 = 19
num3 = 20

自动装箱是直接将一个基本数据类型的变量赋值给对应包装类型的变量;手动装箱是调用包装类的构造方法。

(二)拆箱示例

public class WrapperClassDemo3 {
    public static void main(String[] args) {
        // 自动拆箱
        Integer num1 = 19;
        int num2 = num1;
        System.out.println("num2 = " + num2);

        // 手动拆箱
        int num3 = num1.intValue();
        System.out.println("num3 = " + num3);
    }
}

运行结果:

num2 = 19
num3 = 19

自动拆箱是直接将一个包装类型的变量赋值给对应的基本数据类型变量;手动拆箱通过调用对应包装类下的 xxxValue() 方法来实现。

七、小结

通过本文的学习,我们了解到包装类是将基本数据类型包装成的类,它具有属性和方法,能够实现对象化交互。除了 int 对应的包装类名称为 Integer 以及 char 对应的包装类名称为 Character 外,其他 6 种数据类型对应的包装类,命名均为其基本数据类型首字母的大写。装箱是基本数据类型向包装类的转换,拆箱是包装类向基本数据类型的转换。掌握包装类的使用,能让我们在 Java 编程中更加灵活地处理数据。

### Java 包装详解 Java 中的包装(Wrapper Class)是用来将基本数据型(Primitive Data Type)转换为对象(Object)的一种机制。包装的作用是提供一种方式,使得基本数据型可以像对象一样被操作,例如存储在集合中或进行其他面向对象的操作。 #### 1. 基本数据型与包装的关系 Java 提供了八种基本数据型及其对应的包装[^2]: - **byte** ↔ **Byte** - **short** ↔ **Short** - **int** ↔ **Integer** - **long** ↔ **Long** - **float** ↔ **Float** - **double** ↔ **Double** - **char** ↔ **Character** - **boolean** ↔ **Boolean** 这些包装都位于 `java.lang` 包中,因此不需要显式导入即可使用。 #### 2. 包装的功能 包装的主要功能包括以下几点: - 将基本数据型转换为对象。 - 提供方法来操作和转换基本数据型。 - 提供静态方法将字符串转换为基本数据型。 #### 3. 基本数据型与包装之间的转换 ##### (1) 基本数据型 → 包装 可以通过构造方法或自动装箱(Autoboxing)实现基本数据型到包装的转换。例如: ```java // 使用构造方法 Integer integer = new Integer(100); // 已过时,不推荐使用 // 自动装箱 Integer integerAutoBoxed = 100; // 推荐使用 ``` ##### (2) 包装 → 基本数据型 可以通过调用包装的 `xxxValue()` 方法或自动拆箱(Unboxing)实现包装到基本数据型的转换。例如: ```java Integer integer = new Integer(100); int primitiveInt = integer.intValue(); // 调用intValue()方法 int autoUnboxedInt = integer; // 自动拆箱 ``` #### 4. 包装与字符串的相互转换 ##### (1) 包装 → 字符串 可以通过 `String.valueOf()` 方法将包装转换为字符串。例如: ```java Integer integer = 100; String str = String.valueOf(integer); // 使用String的静态方法 ``` ##### (2) 字符串 → 包装 可以通过包装的 `parseXxx(String s)` 静态方法将字符串转换为包装。例如: ```java String str = "100"; int primitiveInt = Integer.parseInt(str); // 转换为基本数据型 Integer wrapperInt = Integer.valueOf(str); // 转换为包装 ``` #### 5. 包装的常用方法 以下是一些常用的包装方法: - **`compareTo()`**:用于比较两个对象的大小。 - **`equals()`**:用于判断两个对象是否相等。 - **`toString()`**:返回对象的字符串表示形式。 - **`hashCode()`**:返回对象的哈希码值。 #### 6. 注意事项 - **自动装箱与拆箱**:从 Java 5 开始支持自动装箱和拆箱,简化了代码编写,但需要注意潜在的性能问题。 - **缓存机制**:某些包装(如 `Integer`、`Boolean` 等)实现了缓存机制,避免频繁创建新对象。例如,`Integer` 在 -128 到 127 之间的值会被缓存[^1]。 - **空指针异常**:在使用自动拆箱时,如果包装对象为 `null`,会导致 `NullPointerException`。 ```java Integer a = null; int b = a; // 抛出NullPointerException ``` #### 7. 示例代码 以下是一个综合示例,展示如何使用包装进行型转换: ```java public class WrapperClassExample { public static void main(String[] args) { // 基本数据型转包装 Integer integer = Integer.valueOf(100); // 显式转换 Integer autoBoxed = 100; // 自动装箱 // 包装转基本数据型 int primitiveInt = integer.intValue(); // 显式转换 int autoUnboxed = integer; // 自动拆箱 // 包装转字符串 String str = String.valueOf(integer); // 字符串转包装 String strValue = "200"; Integer parsedInteger = Integer.valueOf(strValue); System.out.println("integer: " + integer); System.out.println("primitiveInt: " + primitiveInt); System.out.println("str: " + str); System.out.println("parsedInteger: " + parsedInteger); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值