Java 5.0からは基本データ型(プリミティブ型)とラッパークラス間で
明示的な変換を行わずに代入や演算が出来るオートボクシング、アンボクシングという仕組みがある。
オートボクシング
intの値10(基本データ型)がそのままIntegerクラスのインスタンス内にセットされる。
//コンパイル時にInteger.value(10)に自動変換される Integer numInt = 10;
アンボクシング
ラッパークラスのインスタンス内の値を自動的に取り出して基本データ型に代入している。
Integer numInt = 10; //コンパイル時にnumInt.intValue()で自動変換される int num = numInt;
アンボクシングでintに自動変換された値を演算して
結果を再度オートボクシングでラッパークラスへ代入している例
Integer numInt = 10; int num = 20; //numIntがintにアンボクシングされてnumとの演算結果を再度オートボクシングする Integer sum = num + numInt;
オートボクシングを使う上でのメリット、デメリットをそれぞれまとめる
メリット
変換処理を書かなくても良い。
デメリット
プログラム中、意図しない動作の原因にもなり得る。
参照型のラッパークラスのオブジェクトを == 演算子で比較してしまい意図しない結果を生む可能性がある。
(==演算子での比較についてはこちら)
オートボクシングはvaluOfメソッドによって行われているため、
-128から127の値の範囲内でオートボクシングによって生成されたオブジェクトは常に※同一のオブジェクトとなり、それ以外の範囲だと異なるオブジェクトになる点も注意しておきたい。
※ == で比較してtrue