プリミティブな型は、それ自身ではクラスではないことを、先に述べました。
Javaには、そうしたプリミティブな型をクラスとして包み込むことが
出来るように、特別のクラスが用意されています。
例えば、プリミティブな型 int に対応して、Integer というクラスが
定義されています。次のリストは、このクラスを使ったサンプルです。
このプログラムの出力をあげておきますので、考えてみてください。
このようなものとしては、Integerの他に、Float,Double,Character,Boolean などがあります。
class wrapper { public static void main(String argv[]){ int i = 1996 ; Integer I = new Integer(1996); Integer J = new Integer("1996"); System.out.println("int i = " + i ); System.out.println("Integer I = " + I ); System.out.println("Integer J = " + J ); System.out.println("I.equals(J) ? " + I.equals(J) ); System.out.println("I==J ? " + ( I==J ) ); System.out.println("I.intValue()==J.intValue() ? " + ( I.intValue()==J.int Value() ) ); } }
int i = 1996 Integer I = 1996 Integer J = 1996 I.equals(J) ? true I==J ? false I.intValue()==J.intValue() ? true
クラス wrapper の働きは、すこし分かりにくいかも知れないので、もう一度、
Java での数の表現と、その文字列表現についてまとめておきましょう。
Javaでは、数を表すプリミティブ・タイプとして、int, long, float, double
が用意されています。このプリミティブ・タイプに対応して、
Integer, Long, Float, Double という wrapper クラスが存在します。これらの
wrapper クラスは、Numberというクラスを共通の親として持っています。
これらのクラスのコンストラクタは、つぎの様な形で、数値、ないしは、その 文字列表現を引数に取ります。
Integer I = new Integer(1996); Integer J = new Integer("1996"); Float F = new Float(3.14159); Float G = new Float("3.14159");
このクラスのインスタンスを作る為には、そのwrapper クラスの valueOf()という static メソッドを使うこともできます。
Integer I = Integer.valueOf("1996"); Float F = Float.valueOf("3.14159");
Number クラスの valueOf()は、文字列を引数に取ることに注意してください。
こうして、引数に文字列で与えられた値を持つ、オブジェクトが作られることに
なります。
ある値をもつNumber オブジェクトは、こうして作成されますが、逆に、その オブジェクトの値を知りたいときにはどうすればいいのでしょうか? これは簡単で、Number オブジェクトに対して、intValue(),longValue(), floatValue(), doubleValue() というメソッドを適用すればいいのです。
int i = Integer.valueOf("1996").intValue(); float f = Float.valueOf("3.14159").floatValue();
こうして、i には1996が、fには、3.14159 が入ります。
この方法は、文字列から数値を得る、一般的な方法を提供しています。
特に、整数に対しては、Integer クラスの中に、parseInt()というメソッドが 用意されていて、直接、文字列から数値への変換が可能です。 2番目の例は、文字列"abcd"を16進数の数として、整数に変換します。
int i = Integer.parseInt("1996"); int hex = Integer.parseInt("abcd",16);
Numberクラスから文字列の変換は簡単で、それぞれのオブジェクトに メソッドtoString()を作用させます。