## 包装类
### 为什么要有包装类
> Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型;它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
**简而言之就是,基本数据类型不能当成一个对象使用;包装类可以把基本数据类型转换成一个对象。**
### 对应
| 基础数据类型 | 包装类 |
| --- | --- |
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
### 不同
1. 声明方式不同
基本类型不使用 new 关键字,而包装类型需要使用 new 关键字来在堆中分配存储空间
```
# 基本数据类型
int a = 123;
# 基本数据类型转包装类
Integer a = new Integer(123);
Integer a = 123;
Integer a = Integer.valueOf(123);
# 包装类转基本数据类型
a.intValue();
```
2. 存储方式及位置不同
基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
![](https://img.kancloud.cn/40/34/40343539785b91713ca1da457cad18c7_394x305.png)
3. 初始值不同
基本类型的初始值如 int 为 0,boolean 为 false,而包装类型的初始值为 null ;
4. 使用方式不同
基本类型直接赋值直接使用就好,而包装类型在集合如 Collection<Integer>、Map<Integer, String> 时会使用到。
### 总结
包装类固然是好,但是这样做也不是没有代价的,装箱和拆箱的性能差距,在大数据和大并发的环境中会被体现出来。