Java 包装类
一、引言
在 Java 编程中,数据类型的使用是基础且关键的部分。Java 既有基本数据类型,又有引用数据类型。为了让基本数据类型也能具备对象的特性,以更好地融入面向对象的编程思想,Java 引入了包装类的概念。本文将全面介绍 Java 包装类,包括其定义、存在的意义、具体的包装类类型、常用方法和常量,以及装箱和拆箱操作。
二、什么是包装类
Java 有 8 种基本数据类型,为了能将这些基本数据类型当作对象来使用,Java 为每个基本类型都提供了对应的包装类。包装类可以分为 3 大类:Number、Character、Boolean。
三、为什么需要包装类
Java 是一门面向对象的编程语言,但为了降低开发者的上手难度,它沿用了 C 语言的基本数据类型,因此 Java 的数据类型被分为基本数据类型和引用数据类型。
在进行简单运算时,开发者可以直接使用基本数据类型。然而,在一些需要对象化交互的场景中,比如将基本数据类型存入集合中,基本数据类型就显得力不从心了。因为基本数据类型不具备对象的特征,没有对象的属性和方法,也无法运用面向对象的编程思想来组织代码。而包装类作为类,拥有属性和方法,能够很好地实现对象化交互,这就是包装类存在的意义。
四、基本数据类型与包装类
Java 中基本数据类型对应的包装类如下表所示,这些包装类都位于 java.lang 包下,使用时无需手动引入。
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
除了 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 编程中更加灵活地处理数据。