关于自动装箱和自动拆箱机制
在介绍自动装箱和自动拆箱之前,我们要先了解概念:基本数据类型、包装类和常量池。
1、基本数据类型
Java基本数据类型:有8种,分别是byte(字节)、short(短整型)、int(整型)、long(长整型)、float(浮点型)、double(双精度浮点型)、boolean(布尔类型)、char(字符型)。
基本数据类型 | 字节 | 位数 | 取值范围 | 默认值 |
---|---|---|---|---|
byte | 1 | 8 | -128~127 | 0 |
short | 2 | 16 | -32768 ~ 32767 | 0 |
int | 4 | 32 | -2147483648 ~ 2147483647 | 0 |
long | 8 | 64 | -9223372036854775808 ~ 9223372036854775807 | 0L |
float | 4 | 32 | 1.4E-45 ~ 3.4028235E38 | 0f |
double | 8 | 64 | 4.9E-324 ~ 1.7976931348623157E308 | 0d |
boolean | 1 | —— | true、false | false |
char | 2 | 16 | 0 ~ 65535 | ‘u0000’ |
2、包装类
包装类:作为面向对象语言,有些情况下不能直接对基本数据类型的数据进行处理,为了使基本类型可以像对象一样操作,所以Java语言将基本数据类型包装起来,形成了对应的包装类,对应关系如下表。
基本数据类型 | 对应包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
3、自动装箱和自动拆箱
那么,这两种类型如何转换呢?Java的自动装箱和自动拆箱机制实现了基本数据类型与包装类型的自动转换,在使用到的时候,无需我们人工进行转换操作。
(1)自动装箱
Java自动将基本数据类型转换为包装类型,也就是int→Integer,实际上是调用了方法Integer.valueOf(int)。
public static void main (String[] args) {
// 创建Integer类型的对象i1时,我们可以直接写60(基本数据类型)
// 这时会发生自动装箱,将基本数据类型转换为Integer
// 相当于 Integer i1 = Integer.valueOf(i1);
Integer i1 = 60;
}
(2)自动拆箱
Java自动将包装类型转换为基本数据类型,也就是Integer→int,实际上是调用了方法Integer.intValue()。
(3)什么时候发生自动装拆箱
① 赋值操作:在包装类型和基本数据类型之间进行赋值操作时,会发生自动拆装箱。
public static void main (String[] args) {
// i1是Integer包装类型
<