1. 基本数据类型和包装类的对应关系
基本数据类型 | 包装类 |
---|---|
int | Integer |
short | Short |
byte | Byte |
float | Float |
long | Long |
double | Double |
char | Character |
boolean | Boolean |
2. 基本数据类型和包装类的区别
1. 存储:基本数据类型直接存储值,而包装类存储基本数据类型的引用。
2. 范围:基本数据类型的范围是固定的,而包装类的范围更大。例如,Integer可以存储int的任何值,包括溢出的情况。
3. 方法:包装类提供了许多方法,如parseInt(), format(), valueOf()等,使基本数据类型可以与其他对象进行比较或转换。
4. null值:包装类可以包含null值,表示没有值或未知值,而基本数据类型不能。
5. 默认值:当声明但没有初始化时,基本数据类型的默认值是它们的默认值(例如,int默认为0),而包装类的默认值是null。
6. 传递方式:在方法参数中,基本数据类型通常按值传递,而包装类按引用传递。
性能:在性能方面,由于基本数据类型直接存储值,所以在某些情况下,使用基本数据类型可能会比使用包装类更快。然而,对于大多数应用程序来说,这种差异是微不足道的。
3. 基本数据类型和包装类之间的转换方式
3.1 自动装箱与拆箱
从Java 5开始,Java提供了自动装箱和拆箱的功能,允许基本数据类型和对应的包装类之间自动转换。例如,当你将一个int赋值给一个Integer
对象时,Java会自动进行装箱;相反,当你将一个Integer
对象赋值给一个int
时,Java会自动进行拆箱。
int primitiveInt = 10;
Integer boxedInt = primitiveInt; // 自动装箱
Integer boxedInt2 = Integer.valueOf(20); // 显式装箱
int primitiveInt2 = boxedInt2; // 自动拆箱
//整数包装类转其他类型包装类
Integer number = 100;
byte b = number.byteValue(); // byte类型
short s = number.shortValue(); // short类型
long l = number.longValue(); // long类型
float f = number.floatValue(); // float类型
double d = number.doubleValue(); // double类型
3.2 使用构造函数
可以使用包装类的构造函数显式地将基本数据类型转换为包装类。例如:
int primitiveInt = 30;
Integer boxedInt = new Integer(primitiveInt);
3.3 使用方法
包装类提供了一些方法来将基本数据类型转换为包装类或从包装类转换回基本数据类型。例如,Integer.parseInt()
和Integer.valueOf()
可以将字符串转换为Integer
对象,而Integer.intValue()
可以将Integer
对象转换为int
。
String str = "40";
Integer boxedInt = Integer.valueOf(str); // 将字符串转换为Integer对象
int primitiveInt = Integer.parseInt(str); // 将字符串转换为int
3.4 强制类型转换
在某些情况下,可以使用强制类型转换将包装类转换为基本数据类型。但是,这需要显式地进行转换,并且可能会导致数据丢失或异常。例如:
Integer boxedInt = 50;
int primitiveInt = (int) boxedInt; // 强制转换
需要注意的是,当将包装类转换为基本数据类型时,如果包装类的值超出了基本数据类型的范围,将会发生溢出或数据截断。因此,在进行转换时要小心处理溢出和范围问题。