はじめに
Java を学び始めると、
「int と Integer の違いって何?」
「List が使えないのはなぜ?」
といった疑問に必ずぶつかります。
その答えが ラッパークラス(Wrapper Class) です。
この記事では、初学者でも理解できるように
ラッパークラスとは何か・なぜ必要なのか・どこで使うのか を丁寧に解説します。
ラッパークラスとは?
Java のプリミティブ型(int, double, boolean など)を
オブジェクトとして扱えるようにしたクラスのことです。
| プリミティブ型 | ラッパークラス |
|---|---|
| int | Integer |
| double | Double |
| boolean | Boolean |
| char | Character |
| long | Long |
| float | Float |
| short | Short |
| byte | Byte |
- プリミティブ型は「値そのもの」
- ラッパークラスは「値を包んだオブジェクト」
なぜラッパークラスが必要なの?
1. コレクション(List, Map, Set)がプリミティブ型を扱えないから
Java のコレクションは オブジェクトしか扱えません。
List<int> list; // ❌ コンパイルエラー
List<Integer> list; // ✔ 正しい
理由:
コレクションは ジェネリクス を使っており、
ジェネリクスは 参照型(オブジェクト)しか扱えない ため。
2. null を扱えるのはラッパークラスだけ
int a = null; // ❌ エラー
Integer b = null; // ✔ OK
DB や JSON の値が「存在しない」場合など、
null を扱う必要がある場面ではラッパークラスが必須です。
3. メソッドの引数にオブジェクトが必要な場面がある
例えば、Java のユーティリティメソッドは
ラッパークラスを前提に作られていることが多いです。
Objects.equals(a, b);
オートボクシングとアンボクシング
Java には、プリミティブ型とラッパークラスを
自動で相互変換する仕組みがあります。
✔ オートボクシング(プリミティブ → ラッパー)
int a = 10;
Integer b = a; // 自動で Integer に変換される
✔ アンボクシング(ラッパー → プリミティブ)
Integer x = 20;
int y = x; // 自動で int に変換される
これのおかげで、「いつの間にか Integer を使っていた」状態になりがちです。
ラッパークラスで気をつけるポイント
1. == と equals の違い
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // false(参照が違う)
System.out.println(a.equals(b)); // true(値が同じ)
→ 値の比較は equals を使う
==だとオブジェクトのIDを参照するため、trueにならない
2. null のアンボクシングは例外になる
Integer a = null;
int b = a; // ❌ NullPointerException
まとめ
- ラッパークラスは プリミティブ型をオブジェクトとして扱うためのクラス
- コレクションやジェネリクスで必須
- null を扱えるのはラッパークラスだけ
- オートボクシングで自動変換される
- equals と == の違いに注意
ラッパークラスは Java の基礎ですが、
コレクション・ジェネリクス・例外処理・StreamAPI など
あらゆる分野に関わる重要な概念です。