2007年10月15日月曜日

ラッパークラス

プリミティブ(基本データ型変数)をオブジェクトとして扱うためにラッパークラスがあります。

プリミティブ         ラッパークラス
byte                     Byte
short                   Short
int                         Integer
long                     Long
float                     Float
double                Double
boolean              Boolean
char                     Character

ラッパークラスのオブジェクト生成の際のコンストラクタ引数はそれぞれのプリミティブ型が使用できます。
Character クラス以外は String 型引数も使用できます。

<オブジェクトの生成>
(例)
・ Double d = new Double(5.0);
・ Double d = Double.valueOf(5.0);
・ Double d = Double.valueOf("5.0");
・ Double d = Double.valueOf("5.0f");
・ Short s = d.shortValue(d);

<プリミティブの抽出>
(例)
・ double value = Double.parseDouble("5.0");
・ double value = Double.parseDouble("5.0d");

<オブジェクトの比較>
オブジェクトの比較は == 演算子や equals メソッドで行います。
equals メソッドは Object クラスで定義されていて、String クラス、ラッパークラスでオーバーライドされています。
Object クラスの equals メソッドと String クラスやラッパークラスの equals メソッドは振る舞いが違います。
Object クラスの equals メソッドは比較する2つのオブジェクトがまったく同じオブジェクトの場合 true を返します。
String クラス、ラッパークラスの equals メソッドは2つのオブジェクトがまったく同じでなくても意味的に等しい場合 true を返します。

<サンプル>
Object o1 = new Object();
Object o2 = new Object();
System.out.println("o1 == o2 : " + (o1 == o2));
System.out.println("o1.equals(o2) : " + o1.equals(o2));

Integer i1 = new Integer(5);
Integer i2 = new Integer(5);
System.out.println("i1 == i2 : " + (i1 == i2));
System.out.println("i1.equals(i2) : " + i1.equals(i2));

<出力結果>
o1 == o2 : false
o1.equals(o2) : false
i1 == i2 : false
i1.equals(i2) : true

0 件のコメント: