## 包裝類
### 為什么要有包裝類
> 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. 存儲方式及位置不同
基本類型是直接將變量值存儲在棧中,而包裝類型是將對象放在堆中,然后通過引用來使用;

3. 初始值不同
基本類型的初始值如 int 為 0,boolean 為 false,而包裝類型的初始值為 null ;
4. 使用方式不同
基本類型直接賦值直接使用就好,而包裝類型在集合如 Collection<Integer>、Map<Integer, String> 時會使用到。
### 總結
包裝類固然是好,但是這樣做也不是沒有代價的,裝箱和拆箱的性能差距,在大數據和大并發的環境中會被體現出來。