前回はArraysクラスの使い方を学びました。
今回は「プリミティブ型とラッパークラス」について解説します。int と Integer の違いを理解することで、コレクションの使い方やnullの扱いが明確になります。
プリミティブ型とラッパークラス
Javaには2種類の型があります。
プリミティブ型 ラッパークラス
int → Integer
double → Double
boolean → Boolean
char → Character
long → Long
プリミティブ型は値そのものを直接保持し、ラッパークラスはオブジェクトとして値を包みます。コレクション(List<Integer> など)にはオブジェクトしか入れられないためラッパークラスが必要です。
オートボクシングとアンボクシング
Java 5以降、プリミティブ型とラッパークラスは自動変換されます。
int i = 42;
Integer obj = i; // オートボクシング(int → Integer)
int j = obj; // アンボクシング(Integer → int)
サンプルコード
ファイル作成
「Java63」フォルダに WrapperTest.java という名前でファイルを作成します

コード入力
import java.util.ArrayList;
import java.util.List;
public class WrapperTest {
public static void main(String[] args) {
// オートボクシング・アンボクシング
int primitive = 42;
Integer wrapper = primitive; // オートボクシング
int back = wrapper; // アンボクシング
System.out.println("primitive: " + primitive);
System.out.println("wrapper: " + wrapper);
// nullが扱える(プリミティブ型はnull不可)
Integer nullable = null;
System.out.println("nullable: " + nullable);
// == と equals の違い
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println("\n127 == 127: " + (a == b)); // true (キャッシュ範囲)
System.out.println("128 == 128: " + (c == d)); // false (別オブジェクト)
System.out.println("128 equals 128: " + c.equals(d)); // true (値比較)
// ラッパークラスの便利メソッド
System.out.println("\n--- 便利メソッド ---");
System.out.println("parseInt: " + Integer.parseInt("42"));
System.out.println("toBinary: " + Integer.toBinaryString(10));
System.out.println("toHex: " + Integer.toHexString(255));
System.out.println("MAX_VALUE: " + Integer.MAX_VALUE);
System.out.println("MIN_VALUE: " + Integer.MIN_VALUE);
// コレクションにはラッパークラスが必要
List<Integer> numbers = new ArrayList<>();
numbers.add(1); // オートボクシングで自動変換
numbers.add(2);
numbers.add(3);
int sum = numbers.stream().mapToInt(Integer::intValue).sum();
System.out.println("\nリストの合計: " + sum);
// NullPointerExceptionに注意
System.out.println("\n--- NPEに注意 ---");
Integer nullInt = null;
try {
int value = nullInt; // アンボクシング時にNPE発生
} catch (NullPointerException e) {
System.out.println("NPE発生: アンボクシング時にnullは不可");
}
}
}

コンパイル
javac WrapperTest.java

実行
java WrapperTest
実行結果は次のようになります。
primitive: 42
wrapper: 42
nullable: null
127 == 127: true
128 == 128: false
128 equals 128: true
--- 便利メソッド ---
parseInt: 42
toBinary: 1010
toHex: ff
MAX_VALUE: 2147483647
MIN_VALUE: -2147483648
リストの合計: 6
--- NPEに注意 ---
NPE発生: アンボクシング時にnullは不可

ポイントまとめ
・コレクションにはラッパークラスが必要
・Integer同士の比較は == でなく equals() を使う
・-128〜127のIntegerは同じオブジェクトがキャッシュされる
・nullのIntegerをアンボクシングするとNPEが発生する
まとめ
int は値そのもの、Integer はオブジェクトです。オートボクシングで自動変換されますが、== での比較やnullのアンボクシングには注意が必要です。コレクションを使う場面でラッパークラスが必要になることを覚えておきましょう。
2026/08/23(日) ぱんまる


コメント