JAVA——包裝類的自動裝箱和拆箱
阿新 • • 發佈:2019-01-01
關於JAVA的包裝類自動拆箱和裝箱,有很多人做過介紹,但筆者發現說的不夠簡潔,而這個問題在面試、筆試中又經常涉及,故筆者將蒐集到的資訊與大家分享下:
包裝類(原始型別對應的類,即Boolean, Byte, Short, Integer, Long, Float, Double, Character)的自動拆、裝箱分別是指如下的過程:
裝箱:是指基本型別變為相應包裝類的過程,如Integer a=Integer.valueOf(100);或者int a=100;Integer b=new Integer(a);這裡的Integer.valueOf(100)和new Integer(a)就是裝箱,由基本資料型別構造出一個包裝類的物件。
拆箱:就是裝箱的逆過程。如Integer a=new Integer(100);int b=a.intValue();這裡的a.intValue()就是拆箱的過程,由一個包裝類物件轉換到相應的基本資料型別。
自動裝箱、拆箱:指編譯器幫助開發人員完成包裝類的裝箱和拆箱過程,也就是在將*.java檔案編譯成*.class檔案的過程中完成。本文的目的是要介紹一下,編譯器在何時才進行自動裝箱、拆箱。
包裝類的自動裝箱和拆箱規則如下:
- 遇到賦值運算子“=”(包括傳引數,引數傳遞屬於隱式賦值)時,會將包裝類拆箱或裝箱為相應型別
- 遇到算術運算子、位運算子和位移運算子“+, ++, --, -, *, /, %, &, |, ^, ~, <<, >>, >>>”時,對包裝類進行
- 遇到關係運算符">, <, >=, <="(不包括“==”和“!=”哦)時,對包裝類進行拆箱
- 對關係運算符"==, !="而言,遇到數字常量或算術表示式時,才對包裝類進行拆箱
圖2 *.class檔案裡的內容 值得一提的是,包裝類的equals方法不支援資料型別的自動轉換
本文采用的實驗環境是jdk1.7.0_21。如有錯誤,還請指正,非常感謝。