👌

Javaの基本データ型とラッパークラス: BoxingとUnboxingの仕組み

2024/11/05に公開

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<int> の代わりに ArrayList<Integer> として格納する場合に便利です。
コードの簡潔さ: 手動で変換するコードを省略できるため、コードがスッキリします。

5. 注意点

パフォーマンスへの影響: Boxing/Unboxing ではオブジェクトが生成されるため、頻繁に行うとメモリ使用量や処理速度に影響を与える可能性があります。
null の扱い: Integer 型の変数が null の場合に、int へアンボクシングしようとすると NullPointerException が発生するため注意が必要です。

Discussion