はじめに
Javaのラッパークラスは、基本データ型(プリミティブ型)をオブジェクトとして扱うためのクラスです。これらのクラスは、Javaのコアライブラリで提供されており、プリミティブ型をオブジェクトとして使用する必要がある場合に役立ちます。この記事では、ラッパークラスの概要、各ラッパークラスの説明、使用方法、オートボクシングとアンボクシング、そしてラッパークラスの利点と欠点について見ていきます。
ラッパークラスの概要
Javaには、次の基本データ型があります:
byte
short
int
long
float
double
char
boolean
これらの基本データ型には、それぞれ対応するラッパークラスがあります:
プリミティブ型 | ラッパークラス |
---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
ラッパークラスは、これらのプリミティブ型をオブジェクトとして扱うためのクラスであり、次のような用途があります:
- プリミティブ型の値をコレクション(例えば、
ArrayList
)に格納する - プリミティブ型の値をオブジェクトとして扱い、メソッドの引数や戻り値として使用する
- プリミティブ型の値を文字列に変換したり、文字列からプリミティブ型の値に変換する
各ラッパークラスの詳細
Byte
クラス
-
説明:
byte
型のラッパークラス - 範囲: -128 ~ 127
- サイズ: 1バイト
- 使用例:
Byte byteObj = Byte.valueOf((byte) 10);
byte primitiveByte = byteObj.byteValue();
Short
クラス
-
説明:
short
型のラッパークラス - 範囲: -32,768 ~ 32,767
- サイズ: 2バイト
- 使用例:
Short shortObj = Short.valueOf((short) 100);
short primitiveShort = shortObj.shortValue();
Integer
クラス
-
説明:
int
型のラッパークラス - 範囲: -2^31 ~ 2^31 - 1
- サイズ: 4バイト
- 使用例:
Integer intObj = Integer.valueOf(1000);
int primitiveInt = intObj.intValue();
Long
クラス
-
説明:
long
型のラッパークラス - 範囲: -2^63 ~ 2^63 - 1
- サイズ: 8バイト
- 使用例:
Long longObj = Long.valueOf(10000L);
long primitiveLong = longObj.longValue();
Float
クラス
-
説明:
float
型のラッパークラス - 範囲: ±3.40282347E+38F
- サイズ: 4バイト
- 使用例:
Float floatObj = Float.valueOf(10.5f);
float primitiveFloat = floatObj.floatValue();
Double
クラス
-
説明:
double
型のラッパークラス - 範囲: ±1.79769313486231570E+308
- サイズ: 8バイト
- 使用例:
Double doubleObj = Double.valueOf(10.5);
double primitiveDouble = doubleObj.doubleValue();
Character
クラス
-
説明:
char
型のラッパークラス - 範囲: 0 ~ 65,535
- サイズ: 2バイト
- 使用例:
Character charObj = Character.valueOf('a');
char primitiveChar = charObj.charValue();
Boolean
クラス
-
説明:
boolean
型のラッパークラス -
範囲:
true
またはfalse
- サイズ: 1ビット
- 使用例:
Boolean booleanObj = Boolean.valueOf(true);
boolean primitiveBoolean = booleanObj.booleanValue();
オートボクシングとアンボクシング
Java 5 以降、Javaはプリミティブ型とラッパークラスの間の自動変換(オートボクシングとアンボクシング)をサポートしています。
オートボクシング
オートボクシングは、プリミティブ型を自動的に対応するラッパークラスに変換する機能です。例えば、int
型の値を Integer
型のオブジェクトに自動的に変換します。
Integer intObj = 10; // オートボクシング
アンボクシング
アンボクシングは、ラッパークラスのオブジェクトを自動的に対応するプリミティブ型に変換する機能です。例えば、Integer
型のオブジェクトを int
型の値に自動的に変換します。
int primitiveInt = intObj; // アンボクシング
オートボクシングとアンボクシングの例
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
// オートボクシング
intList.add(10);
intList.add(20);
intList.add(30);
// アンボクシング
int sum = 0;
for (Integer num : intList) {
sum += num;
}
System.out.println("Sum: " + sum); // 出力: Sum: 60
}
}
ラッパークラスの利点と欠点
利点
- コレクションの使用: Javaのコレクションフレームワークはオブジェクトを扱うため、ラッパークラスを使用することでプリミティブ型の値をコレクションに格納できます。
- メソッドの使用: ラッパークラスには、多くのユーティリティメソッドが提供されており、これらを使用してプリミティブ型の値を操作できます。
- オブジェクトの必要性: 一部のJava APIはオブジェクトを要求するため、ラッパークラスを使用することでこれらのAPIを利用できます。
欠点
- オーバーヘッド: ラッパークラスはプリミティブ型よりも多くのメモリを消費し、パフォーマンスが低下する可能性があります。
- ボクシングとアンボクシングのコスト: オートボクシングとアンボクシングには若干のパフォーマンスオーバーヘッドが伴います。
-
ヌルポインタ例外: ラッパークラスのオブジェクトがヌルである場合、アンボクシング時に
NullPointerException
が発生する可能性があります。
まとめ
Javaのラッパークラスは、基本データ型をオブジェクトとして扱うためのクラスであり、コレクションフレームワークの使用やAPIとの互換性を提供します。オートボクシングとアンボクシングによって、プリミティブ型とラッパークラスの間の変換が簡単に行えるようになっています。しかし、ラッパークラスの使用にはメモリオーバーヘッドやパフォーマンスの低下などの欠点もあるため、適切な状況で使用することが重要です。