Javaには、基本データ型(プリミティブ型)とそれに対応するラッパークラスが存在します。基本データ型は直接メモリに格納されるシンプルなデータ型ですが、Javaのコレクションフレームワークなどのオブジェクト型が必要な場面ではラッパークラスが利用されます。この基本データ型とラッパークラス間の自動変換を、それぞれ Boxing と Unboxing と呼びます。この記事では、BoxingとUnboxingの仕組み、各基本データ型に対応するラッパークラス、そして実際の使用例をご紹介します。
1. BoxingとUnboxingとは?
Boxing: 基本データ型から対応するラッパークラスへの自動変換のこと。Javaでは基本データ型(int, double など)をラッパークラス(Integer, Double など)に自動的に変換できます。
Unboxing: ラッパークラスから基本データ型への自動変換のこと。
Boxingの逆で、Integer から int などの変換が自動で行われます。
Java 5 以降では、BoxingとUnboxingは自動的に行われるため、コードがシンプルで可読性の高いものになります。
2. 基本データ型と対応するラッパークラス
基本データ型 ラッパークラス
boolean
Boolean
byte
Byte
char
Character
short
Short
int
Integer
long
Long
float
Float
double
Double
3. 各基本データ型のボクシング例
Boxing と Unboxing の例をそれぞれ見ていきましょう。
int と Integer
int intVal = 100;
Integer intObj = intVal; // Boxing: int を Integer に自動変換
int intResult = intObj; // Unboxing: Integer を int に自動変換
double と Double
double doubleVal = 3.14159;
Double doubleObj = doubleVal; // Boxing
double doubleResult = doubleObj; // Unboxing
その他の基本データ型
boolean boolVal = true;
Boolean boolObj = boolVal; // Boxing
char charVal = 'A';
Character charObj = charVal; // Boxing
float floatVal = 3.14f;
Float floatObj = floatVal; // Boxing
4. オートボクシングとアンボクシングの利点
コレクションへの格納: Javaのコレクションフレームワーク(ArrayList, HashMap など)は参照型のみを扱うため、ArrayList の代わりに ArrayList として格納する場合に便利です。
コードの簡潔さ: 手動で変換するコードを省略できるため、コードがスッキリします。
5. 注意点
パフォーマンスへの影響
: Boxing/Unboxing ではオブジェクトが生成されるため、頻繁に行うとメモリ使用量や処理速度に影響を与える可能性があります。
null の扱い: Integer 型の変数が null の場合に、int へアンボクシングしようとすると NullPointerException
が発生するため注意が必要です。