首页 > 编程笔记
Java包装类用法详解
在 Java 通常使用的一般数据类型又称为值类型。这种数据类型存储在栈中,不属于对象的范畴。
Java 是面向对象的程序设计语言,基本数据类型不是面向对象的形式,所以不符合面向对象程序设计的基本思想。但基本数据类型易于理解,能够简化程序的编写,所以有其存在的合理性。
实际开发中,有时需要使用以对象形式表示的数据类型,这就需要为每种基本数据类型提供对应的类,将原始类型转换为对象类型。
所谓包装类,就是把值类型的变量进行包装,采用对象的方式对其进行操作,使其有自己的属性和方法。把值类型的数据包装成引用类型的过程又称为装箱,其逆过程称为拆箱。
Java SE 1.5 提供了自动装箱和自动拆箱功能,可以将原始类型自动转换为对象类型,以及将对象类型自动转换为原始类型。
在这 8 个类中,除了 Integer 和 Character,其他 6 个类的类名和基本数据类型一致,只是类名的第一个字母使用大写形式而已。
【实例】包装类的基本应用。
在现实开发中,包装类的默认值 null 可以有效标记该变量是否被初始化,而基本数据类型想要实现相同效果则更复杂。例如,在表示温度的成员变量中,如果使用 Double 类型,则默认值 null 表示数据没有初始化。如果使用 double 类型,那么默认值 0.0 容易产生歧义,无法分辨是未初始化,还是温度刚好为 0℃。
从 Java 5 开始,不再需要使用包装器类的 valueOf() 方法将原始数据类型转换为对象。
【实例】Java自动装箱的应用。
从 Java 5 开始,不再需要使用包装类的方法将包装类转换为原始类型。
【实例】Java 自动拆箱的应用。
除了方法,包装类还提供了一些比较常用的静态常量,下面以 Integer 类为例展开介绍:
【实例】Integer 类中的方法的应用。
Java 是面向对象的程序设计语言,基本数据类型不是面向对象的形式,所以不符合面向对象程序设计的基本思想。但基本数据类型易于理解,能够简化程序的编写,所以有其存在的合理性。
实际开发中,有时需要使用以对象形式表示的数据类型,这就需要为每种基本数据类型提供对应的类,将原始类型转换为对象类型。
所谓包装类,就是把值类型的变量进行包装,采用对象的方式对其进行操作,使其有自己的属性和方法。把值类型的数据包装成引用类型的过程又称为装箱,其逆过程称为拆箱。
Java SE 1.5 提供了自动装箱和自动拆箱功能,可以将原始类型自动转换为对象类型,以及将对象类型自动转换为原始类型。
Java的包装类
java.lang 包内的 8 个类在 Java 中称为包装类。基本数据类型对应的包装类如下表所示。基本数据类型 | 包装类 |
---|---|
int | Integer |
float | Float |
char | Character |
double | Double |
boolean | Boolean |
byte | Byte |
long | Long |
short | Short |
在这 8 个类中,除了 Integer 和 Character,其他 6 个类的类名和基本数据类型一致,只是类名的第一个字母使用大写形式而已。
【实例】包装类的基本应用。
public class Demo { public static void main(String[] args) { Integer i = new Integer(10); // 括号中应该是数字10,而不是字符l0 Character c = new Character('a'); // 正确使用单引号定义字符 System.out.println(i); // 打印Integer对象的值 System.out.println(c); // 打印Character对象的值 } }运行结果为:
10
a
包装类和基本数据类型的区别
1) 默认值不同
包装类的默认值是 null,而基本数据类型采用对应的默认值(如整型的默认值是 0,浮点类型的默认值是 0.0)。在现实开发中,包装类的默认值 null 可以有效标记该变量是否被初始化,而基本数据类型想要实现相同效果则更复杂。例如,在表示温度的成员变量中,如果使用 Double 类型,则默认值 null 表示数据没有初始化。如果使用 double 类型,那么默认值 0.0 容易产生歧义,无法分辨是未初始化,还是温度刚好为 0℃。
2) 存储区域不同
基本数据类型把值保存在栈内存中;包装类把对象保存在堆中,并通过对象的引用来调用这些对象。Java自动装箱
将基本数据类型转换为包装类称为装箱。将原始数据类型自动转换为其对应的包装类的操作称为自动装箱。从 Java 5 开始,不再需要使用包装器类的 valueOf() 方法将原始数据类型转换为对象。
【实例】Java自动装箱的应用。
public class Demo { public static void main(String[] args) { // 将int型转换为Integer int a = 20; // 手动转换,将int型显式转换为Integer Integer i = Integer.valueOf(a); // 自动装箱,编译器将在内部调用Integer.valueOf(a)方法 Integer j = a; // 打印原始int类型和两个Integer对象 System.out.println(a + "" + i + "" + j); } }运行结果为:
20 20 20
4.Java自动拆箱
将包装类转换为基本数据类型称为拆箱。将包装类自动转换为其对应的原始类型的操作称为自动拆箱,这是自动装箱的逆向过程。从 Java 5 开始,不再需要使用包装类的方法将包装类转换为原始类型。
【实例】Java 自动拆箱的应用。
public class Demo { public static void main(String[] args) { // 将Integer转换为int型 Integer a = new Integer(3); // 手动转换,将Integer明确转换为int型 int i = a.intValue(); // 自动拆箱,编译器将在内部调用a.intValue()方法 int j = a; // 打印Integer对象和两个int变量 System.out.println(a + " " + i + " " + j); } }运行结果为:
3 3 3
Java包装类的方法
除了数据封装,包装类还提供了一些与相应数据类型相关的操作方法。下面以 Integer 类为例展开介绍:- static int parseInt(String s):可以将字符串转换为相应的 int 型数据,需要注意的是,传入的字符串中的值必须是正确的,否则会抛出异常。
- static String toOctalString(int i):以字符串形式返回 int 型数据对应的八进制形式。
- static String toHexString(int i):以字符串形式返回 int 型数据对应的十六进制形式。
- static int max(int a, int b):返回两个值中的较大值。
- static int min(int a, int b):返回两个值中的较小值。
除了方法,包装类还提供了一些比较常用的静态常量,下面以 Integer 类为例展开介绍:
- static final int MIN_VALUE:返回 int 型的最小值。
- static final int MAX_VALUE:返回 int 型的最大值。
- final static char[] digits:返回将数字表示为字符串的所有可能字符组成的数组。
- final static int [] sizeTable:返回各数量级的最大值所组成的数组。
【实例】Integer 类中的方法的应用。
public class Demo { public static void main(String[] args) { // 将字符串转换为int型 String str = "123"; // 变量名应使用合适的命名规则 int num = Integer.parseInt(str); System.out.println("num = " + num); // 将数值转换为八进制形式 String octal = Integer.toOctalString(128); System.out.println("128 to Octal = " + octal); // 将数值转换为十六进制形式 String hex = Integer.toHexString(128); // 方法名应为toHexString System.out.println("128 to hex = " + hex); // 比较大小 System.out.println("max(12, 18) = " + Integer.max(12, 18)); System.out.println("min(12, 18) = " + Integer.min(12, 18)); // 输出int型的最大值和最小值 System.out.println("int max = " + Integer.MAX_VALUE); System.out.println("int min = " + Integer.MIN_VALUE); } }运行结果为:
num = 123
128 to Octal = 200
128 to hex = 80
max(12, 18) = 18
min(12, 18) = 12
int max = 2147483647
int min = -2147483648