前言:java 5.0 開始對基本數據類型提供了 自動裝箱 (autoboxing) 和 自動拆箱 (autounboxing) 的功能,使得基本數據類型與其對象之間的轉換變得極其方便。即便你不知道 什么是 自動裝箱與拆箱,但相信你平常時候一直都在接觸,只是在你還沒有觸及這樣一個概念之前,一直沒有發覺而已。但是你需要知道在 java 中什么是自動裝箱與拆箱,還需要知道 int 和 short 的裝箱,因為這兩個的裝箱規則與 float 或 double 以及其他的基本數據類型不完全一樣。自動裝箱:
自動拆箱:
就上面示例代碼塊而言,實際上自動裝箱就是系統自動幫我們去 new 了 Integer 對象,大家都知道,每個對象都會有一個 hashCode() 方法,這個方法是繼承 Object 而來,Object 類是所有類的超類。當需要比較兩個對象是否相等時,可以用 " == " 和 equals 來做比較。于對象而言, " == " 比較的是哈希碼的值,也就是比較 hashCode() 方法的返回值,這個值是唯一的,在底層它是用來確定對象在堆內存上的存儲位置。" == " 也可以用來做基本數據類型的比較。equals 方法大家都知道,它是用來比較兩個對象的內容是否一樣。上面說到自動裝箱其實就是系統自動幫我們去 new 了 Integer 對象,但是神奇的事情發生了:當 int 的取值在 -128 ~ 127 之間的時候,這時候系統并不會每次都幫我們去 new 一個 Integer 對象,而是取值相同的對象只會被 new 一次,取值相同的 Integer 對象系統不會再去 new 一次,而是共享了已有的這個 Integer 對象。而當 int 的取值在 -128 ~ 127 之外的時候,這時候不管 Integer 對象的取值是否一樣,系統都會去 new 一個。
示例代碼:
示例代碼輸出結果:
short 與 int 的裝箱規則是一樣,就不多說了,但不要認為所有的基本數據類型都有這樣一個規則,比如 float 和 double 都沒有這樣的規則,float 和 double 每次裝箱的時候都是會包裝成一個對象的。
個人主頁
beanutil
jutil
jexcel
orc