ラッパークラスとは基本データ型(プリミティブ型)をオブジェクトとして取り扱うクラスである。
基本データ型はオブジェクトでなく、単なる値でありそれ自身はメソッドを持たないため、
値に対する操作が必要なときに値を内包するラッパークラスが用意されている。
ラッパークラスは基本データ型の値を操作する機能を備えている。
※以下は基本データ型とそれに対応するラッパークラスの一覧
プリミティブ型 | ラッパークラス |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
char | java.lang.Character |
float | java.lang.Float |
double | java.lang.Double |
boolean | java.lang.Boolean |
代表としてIntegerクラスを例に基本データ型からラッパークラスへ変換する方法をメモ。
コンストラクタを利用する。(int型の値を渡してnewで生成)
Integer numInt = new Integer(10);
ValueOfメソッドを使用する。
Integer numInt = Integer.valueOf(10);
上記の二つの方法で基本データ型のintの値からIntegerクラスのオブジェクトを生成できるが、
後のvalueOfメソッドを使用した方が、-128から127の範囲であれば事前にキャッシュされたオブジェクトを利用できるためメモリ効率が良くなる。
(先のコンストラクタの利用は必ず新たなオブジェクトが生成されメモリを消費する)
Integerオブジェクトが表す数値をint型の値で返すには、intValueメソッドを使用する。
Integer numInt = Integer.valueOf(10); int num = numInt.intValue(); System.out.println(num); //10が出力される
初期値の違い
ラッパークラスと基本データ型でそれぞれの初期値の違いについて確認する。
Integerとintをそれぞれクラスのフィールドとして明示的に初期化しない場合、
Integer型はnullとなり、intは0となる。
public class IntegerTest { private int primitiveNum; private Integer wrapperNum; public String toString() { return "int型フィールドの初期値 : " + primitiveNum + ", Integer型フィールドの初期値 : " + wrapperNum; } }
IntegerTest test = new IntegerTest(); System.out.println(test);
実行結果(コンソールに出力)
int型フィールドの初期値 : 0, Integer型フィールドの初期値 : null
int型フィールドの初期値 : 0, Integer型フィールドの初期値 : null
またJava5.0からは基本データ型とラッパークラスの間で自動変換が出来る仕組みもあり、
こちらの記事で書いています。