Javaには、基本的なデータ型であるプリミティブ型(int, boolean, charなど)と、クラスベースの参照型(String, ArrayListなど)の2種類があります。
ラッパークラスは、このプリミティブ型のデータをオブジェクトとして扱うために用意されたクラスです。プリミティブ型を「包む(ラップする)」ことからこの名前がついています。
プリミティブ型とラッパークラスの対応
| プリミティブ型 | ラッパークラス |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
ラッパークラスが必要な理由
ラッパークラスは、特に以下の状況で必要になります。
- コレクション(List, Map, Setなど): Javaのコレクションはオブジェクトしか格納できません。そのため、
intのリストを作りたい場合は、List<Integer>のようにラッパークラスを使います。 - Generics (ジェネリクス):
< >内にプリミティブ型を直接記述できないため、ラッパークラスを使います。 - Nullの許容: プリミティブ型は
null(値がないこと)を表現できませんが、ラッパークラスは参照型であるためnullを代入できます。
Java
// 例: Listにはプリミティブ型の int は使えない
// List<int> list = new ArrayList<>(); // エラー
List<Integer> list = new ArrayList<>(); // OK
🔄 2. オートボクシングとアンボクシング
Java 5から導入された**オートボクシング(Autoboxing)とアンボクシング(Unboxing)**の機能により、プリミティブ型とラッパークラスの相互変換が自動で行われるようになり、コードが簡潔になりました。
① オートボクシング (Autoboxing)
プリミティブ型の値が、対応するラッパークラスのオブジェクトに自動で変換されること。
Java
int pValue = 100;
// ラッパークラス変数にプリミティブ値を代入すると、自動でオブジェクトに変換される
Integer wObject = pValue; // ← 自動で new Integer(100) が実行される
② アンボクシング (Unboxing)
ラッパークラスのオブジェクトが、対応するプリミティブ型の値に自動で変換されること。
Java
Integer wObject = 200; // Autoboxing
// プリミティブ型変数にラッパーオブジェクトを代入すると、自動で値が取り出される
int pValue = wObject; // ← 自動で wObject.intValue() が実行される
💻 簡潔な記述
オートボクシングとアンボクシングにより、開発者はプリミティブ型とラッパークラスの間の変換を意識せず、直感的に操作できます。
Java
List<Integer> numbers = new ArrayList<>();
// 1. Autoboxing: 10というint値がIntegerオブジェクトに変換され追加される
numbers.add(10);
numbers.add(20);
// 2. Unboxing: sumを計算する際、Integerオブジェクトからint値が自動で取り出される
int sum = numbers.get(0) + numbers.get(1); // sum = 30
⚠️ 3. 注意点:nullPointerException
ラッパークラスを使用する際、アンボクシングが行われる状況でオブジェクトが null だった場合は、必ずNullPointerExceptionが発生します。
Java
Integer num = null;
// int i = num; // ← 実行時、ここで NullPointerException が発生!
// 理由: numがnullであるため、int値を取り出せない
ラッパークラスの変数を扱う際は、値がnullである可能性を常に考慮し、if (num != null)などでチェックすることが重要です。

