1. 问题引出:基本数据类型与对象之间的差异
在 Java 中,基本数据类型(如 int、char、double 等)和对象之间有一些显著的差异:
- 基本数据类型 (primitive types)是 Java 中的基本构造块,存储的是实际的数据值。例如:
int存储一个整数,boolean存储一个布尔值,char存储一个字符等。 - 对象类型(reference types)是指类和接口类型,存储的是对象的引用,而对象的值存储在堆内存中。
在某些场景下,我们需要将基本数据类型作为对象使用。这时就引出了 包装类(Wrapper Classes)的概念。
2. 包装类
Java 中的 包装类(Wrapper Classes)就是将基本数据类型包装成对象的类。Java 为每种基本数据类型提供了一个对应的包装类,使得我们能够像操作对象一样操作基本数据类型。

3.包装类的使用方法
**装箱:**将 基本数据类型 转换为 对应的包装类对象
**拆箱:**将 包装类 自动转换回 基本数据类型
自动装箱(Autoboxing) :
自动装箱是 Java 5 引入的功能,允许编译器自动将 基本数据类型 转换为 对应的包装类对象。例如:
java
Integer intObj = 10; // 自动装箱
自动装箱底层调用的是valueOf方法,比如IntegervalueOf()
自动拆箱(Unboxing) :
自动拆箱是指 Java 编译器将包装类自动转换回基本数据类型。例如:
java
int num = intObj; // 自动拆箱
手动装箱和拆箱 :
包装类的构造方法可以用来手动装箱。例如:
java
Integer intObj = new Integer(10); // 手动装箱,int->integer
int num = intObj.intValue(); // 手动拆箱
4.包装类的应用场景
包装类主要用于以下几个场景:
- 集合类存储 :集合类(如
ArrayList、HashMap等)不能直接存储基本数据类型,而只能存储对象。因此,包装类被广泛用于集合中。
- 处理字符串 :包装类提供了将字符串转换为数字和将数字转换为字符串的功能。例如,
Integer.parseInt()用于将字符串转换为整数。 - 类型转换和比较 :包装类提供了类型转换和比较的方法,例如
Double.compare()方法可以比较两个double值,Integer.valueOf()可以将int转换为Integer。
5.包装类与String类型的转换
1. 从基本数据类型转换为 String
- 使用
String.valueOf():
String.valueOf() 方法可以将任何类型的数据转换为字符串,包括基本数据类型和对象。它可以将数字、布尔值等转换为对应的字符串表示。
java
int num = 123;
String str = String.valueOf(num); // 输出 "123"
-
使用
Integer.toString()/Double.toString()等 :对于每种基本数据类型的包装类,都有一个
toString()方法可以直接将包装类对象转换为字符串。javaInteger num = 123; String str = num.toString(); // 输出 "123" -
使用字符串连接操作:
通过将基本数据类型与一个空字符串 "" 进行连接,也可以将它转换为 String。
java
int num = 123;
String str = num + ""; // 输出 "123"
2.从 String 转换为基本数据类型
将 String 类型转换为基本数据类型时,我们需要使用包装类的 parseX() 方法。例如,Integer.parseInt() 用于将 String 转换为 int,Double.parseDouble() 用于将 String 转换为 double。
-
使用
parseX()方法 :这些方法会将
String转换为对应的基本数据类型。如果转换失败(例如字符串不符合数字格式),会抛出NumberFormatException异常。javaString str = "123"; int num = Integer.parseInt(str); // 转换为 int,结果为 123 String str2 = "12.34"; double d = Double.parseDouble(str2); // 转换为 double,结果为 12.34 -
使用包装类的
valueOf()方法 :valueOf()方法不仅可以将字符串转换为对应的包装类对象,还可以通过自动拆箱(Unboxing)将包装类对象转换为基本数据类型。javaString str = "123"; Integer integer = Integer.valueOf(str); // 转换为 Integer 对象 // 直接通过自动拆箱获取基本类型 int num = integer; // 自动拆箱,num = 123