核心概念:什么是装箱与拆箱?
要理解'自动',首先要理解手动的'装箱'和'拆箱'。
Java 是一个面向对象的语言,但为了效率,它同时包含了两种不同的类型系统:
- 基本数据类型:
byte,short,int,long,float,double,char,boolean。它们直接存储'值',存在于栈内存中,效率高。 - 引用类型:所有
Object的子类。它们存储的是对象的'引用'(地址),实际对象存在于堆内存中。
在某些场景下(例如使用集合类 ArrayList, HashMap),我们必须使用引用类型,因为集合只能存储对象。这就产生了在基本类型和其对应的包装类对象之间转换的需求。
包装类:Java 为每一个基本类型都提供了一个对应的'包装类',将这些基本类型'包装'成对象。
| 基本数据类型 | 包装类 |
|---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
手动装箱
将一个基本数据类型的值,包装成对应的包装类对象。
// 手动装箱
int i = 10;
Integer integerObj = Integer.valueOf(i); // 方式一:推荐,使用了缓存(后面会讲)
// 或者 Integer integerObj2 = new Integer(i); // 方式二:已过时 (Deprecated),不推荐
手动拆箱
从一个包装类对象中,提取出它所包裹的基本数据类型的值。
// 手动拆箱
();
integerObj.intValue();


