前言:
java 5.0 開始對基本數據類型提供了 自動裝箱 (autoboxing) 和 自動拆箱 (autounboxing) 的功能,
使得基本數據類型與其對象之間的轉換變得極其方便。
即便你不知道 什么是 自動裝箱與拆箱,但相信你平常時候一直都在接觸,只是在你還沒有觸及這樣一個概念之前,一直沒有發覺而已。
但是你需要知道在 java 中什么是自動裝箱與拆箱,還需要知道 int 和 short 的裝箱,因為這兩個的裝箱規則與 float 或 double 以及
其他的基本數據類型不完全一樣。
自動裝箱:

2

3

4

5

6

7

8

自動拆箱:

2

3

4

5

6

7

8

9

10

就上面示例代碼塊而言,實際上自動裝箱就是系統自動幫我們去 new 了 Integer 對象,大家都知道,每個對象都會有一個 hashCode() 方法,
這個方法是繼承 Object 而來,Object 類是所有類的超類。當需要比較兩個對象是否相等時,可以用 " == " 和 equals 來做比較。
于對象而言, " == " 比較的是哈希碼的值,也就是比較 hashCode() 方法的返回值,這個值是唯一的,在底層它是用來確定對象在堆內存上的存儲位置。
" == " 也可以用來做基本數據類型的比較。equals 方法大家都知道,它是用來比較兩個對象的內容是否一樣。
上面說到自動裝箱其實就是系統自動幫我們去 new 了 Integer 對象,但是神奇的事情發生了:
當 int 的取值在 -128 ~ 127 之間的時候,這時候系統并不會每次都幫我們去 new 一個 Integer 對象,而是取值相同的對象只會被 new 一次,
取值相同的 Integer 對象系統不會再去 new 一次,而是共享了已有的這個 Integer 對象。
而當 int 的取值在 -128 ~ 127 之外的時候,這時候不管 Integer 對象的取值是否一樣,系統都會去 new 一個。
示例代碼:

2

3

4

5

6

7

8

9

10

11

12

示例代碼輸出結果:

2

3

4

5

short 與 int 的裝箱規則是一樣,就不多說了,但不要認為所有的基本數據類型都有這樣一個規則,比如 float 和 double 都沒有這樣的規則,
float 和 double 每次裝箱的時候都是會包裝成一個對象的。