🎁 ラッパークラス (Wrapper Class) とは

Javaには、基本的なデータ型であるプリミティブ型int, boolean, charなど)と、クラスベースの参照型String, ArrayListなど)の2種類があります。

ラッパークラスは、このプリミティブ型のデータをオブジェクトとして扱うために用意されたクラスです。プリミティブ型を「包む(ラップする)」ことからこの名前がついています。

プリミティブ型とラッパークラスの対応

プリミティブ型ラッパークラス
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

ラッパークラスが必要な理由

ラッパークラスは、特に以下の状況で必要になります。

  1. コレクション(List, Map, Setなど): Javaのコレクションはオブジェクトしか格納できません。そのため、intのリストを作りたい場合は、List<Integer>のようにラッパークラスを使います。
  2. Generics (ジェネリクス): < >内にプリミティブ型を直接記述できないため、ラッパークラスを使います。
  3. 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)などでチェックすることが重要です。