Java のプリミティブデータ型のラッパークラス:Wrapper Class for Java Primitive Data Types
Java には、プリミティブデータ型をオブジェクトとして扱うための「ラッパークラス」が用意されています。ラッパークラスは、データ型をクラス化して扱いやすくするためのもので、多くのユーティリティメソッドを提供します。このページでは、ラッパークラスについて詳しく解説し、例を交えながらその使い方を説明します。
ラッパークラスとは
Java のプリミティブデータ型は効率的ですが、オブジェクト指向のプログラミングではオブジェクトとして扱いたい場合があります。この目的で、各プリミティブ型に対応するラッパークラスが用意されています。ラッパークラスを使用すると、プリミティブ値をオブジェクトとして操作できます。
たとえば、int
型のラッパークラスはInteger
です。このクラスを使うことで、int
型をオブジェクトとして操作できるようになります。
ラッパークラスの一覧
以下は、Java におけるプリミティブ型とその対応するラッパークラスの一覧です。
プリミティブ型 | ラッパークラス |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
オートボクシングとアンボクシング
Java では、プリミティブ型とその対応するラッパークラス間で自動的に型変換が行われます。
オートボクシング
オートボクシングとは、プリミティブ型が自動的にラッパークラス型に変換されることを指します。
int primitiveValue = 10;
Integer wrapperObject = primitiveValue; // オートボクシング
アンボクシング
アンボクシングとは、ラッパークラス型が自動的にプリミティブ型に変換されることを指します。
Integer wrapperObject = 20;
int primitiveValue = wrapperObject; // アンボクシング
ラッパークラスの使用例
コレクションでの使用
Java のコレクションフレームワークでは、オブジェクトのみを扱うため、プリミティブ型を直接格納できません。ラッパークラスを使用して格納します。
import java.util.ArrayList;
import java.util.List;
public class WrapperExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1); // オートボクシング
list.add(2);
list.add(3);
for (int number : list) { // アンボクシング
System.out.println(number);
}
}
}
ユーティリティメソッドの利用
ラッパークラスには、多くの便利な静的メソッドがあります。例として、Integer
クラスを使用した数値のパースを示します。
String numberStr = "123";
int number = Integer.parseInt(numberStr);
System.out.println("Parsed number: " + number);
値の比較
Integer
クラスのcompare
メソッドを使用して値を比較できます。
int result = Integer.compare(10, 20);
System.out.println("Comparison result: " + result);
注意点
ラッパークラスを使用する際の注意点を以下に示します。
パフォーマンスの影響
ラッパークラスを使用すると、プリミティブ型に比べてパフォーマンスが低下する場合があります。特に、大量のデータを扱う場合は注意が必要です。
null 値の扱い
ラッパークラスはオブジェクトであるため、null
を格納できます。null
値をアンボクシングしようとするとNullPointerException
が発生するため、注意が必要です。
Integer wrapperObject = null;
int primitiveValue = wrapperObject; // NullPointerException
等価性の比較
ラッパークラスの等価性を比較する際は、==
ではなくequals
メソッドを使用するのが一般的です。
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true