Integer クラスRevised: May/5th/2008; Since: Jan./1st/2002
32 ビット整数を表す基本データ型であるint型のラッパー・クラスです。int型とのボクシング変換がサポートされています。
java.lang.Object
|
+--java.lang.Number
|
+--java.lang.Integer
親クラスNumberを継承しています。Number<のサブクラスは、AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Shortです。これらのクラス型オブジェクトは、Number型変数に代入可能です。
API 仕様では次のように説明されています:
Integerクラスは、プリミティブ型intの値をオブジェクトにラップします。Integer型のオブジェクトには、型がintの単一フィールドが含まれます。さらにこのクラスは、
intをStringに、Stringをintに変換する各種メソッドや、intの処理時に役立つ定数およびメソッドも提供します。
Integer型オブジェクトは、コンストラクタではなく、ボクシング変換かメソッドvalueOf()を使うことが一般的です。
class TestInteger {
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = Integer.valueOf("-128");
System.out.println(i1);
System.out.println(i2);
}
}
static Integer |
valueOf(int i)
指定した int 値を表す Integer インスタンスを返します。 |
static Integer |
valueOf(String s)
指定された String の値を保持する Integer オブジェクトを返します。 |
static Integer |
valueOf(String s,
int radix)
2 番目の引数で指定された基数を使用した構文解析時に、指定された String から抽出された値を保持する Integer オブジェクトを返します。 |
int型かString型を引数の持つコンストラクタも用意されています。しかし、Stringクラスのコンストラクタを使うことがないように、Integerクラスでも使うことはないでしょう。
メソッド、メンバ変数については、沢山あるので全ては紹介しません。詳細は API 仕様を直接ご確認ください。
ここに挙げたのは、次のサンプルで利用するメソッドのみです。
| 修飾子 | 戻り値型 | メソッド | 概要 |
|---|---|---|---|
boolean | equals(Object obj) |
このオブジェクトを指定されたオブジェクトと比較します。 | |
double | doubleValue() |
この Integer の値を double 値として返します。 | |
static | String | toBinaryString(int i) |
整数の引数の文字列表現を、基数 2 の符号なし整数として作成します。 |
static | String | toHexString(int i) |
整数型の引数の文字列表現を、基数 16 の符号なし整数として作成します。 |
static | String | toOctalString(int i) |
整数の引数の文字列表現を、基数 8 の符号なし整数として作成します。 |
static | int | parseInt(String s) |
文字列の引数を符号付き 10 進数の整数型として解析します。 |
static | int | parseInt(String s, int radix) |
2 番目の引数に指定された基数を元にして、文字列の引数を符号付き整数として解析します。 |
String | toString() |
この Integer の値を表す String オブジェクトを返します。 | |
static | String | toString(int i) |
指定された整数を表す新しい String オブジェクトを返します。 |
static | String | toString(int i, int radix) |
2 番目の引数を基数として、1 番目の引数の文字列表現を作成します。 |
次のサンプルは、コマンドライン引数の文字列を Integer 型のオブジェクトにラッピングします。
int 型、 double 型に変換します。static 型のメソッドを用いて 16 進、 8 進、 2 進での表現に変換します。static 型のメソッドを用いて int 型に変換します。
class TestInteger {
public static void main(String args[]) {
//インスタンス化
Integer objInt = Integer.valueOf(args[0]);
System.out.println("objInt: " + objInt);
//オブジェクトとの比較
// J2SE 1.4以下の場合
// Integer objComp = new Integer(1011);
// J2SE 5.0以上の場合
Integer objComp = 1011; // オートボクシング
boolean valBln = objInt.equals(objComp);
System.out.println("objInt=1011? " + valBln);
//int 型への変換
// J2SE 1.4以下の場合
// int i = objInt.intValue();
// J2SE 5.0以上の場合
int i = objInt; // アンボクシング
System.out.println("int: " + i);
//double 型へ変換
// J2SE 1.4以下の場合
// double valDbl = objInt.doubleValue();
// J2SE 5.0以上の場合
double valDbl = objInt; // アンボクシング+拡張型変換
System.out.println("double: " + valDbl);
//n 進数変換
//int 型変数を n 進数に変換する
String valBin, valHex, valOct;
valBin = Integer.toBinaryString(i);
valHex = Integer.toHexString(i);
valOct = Integer.toOctalString(i);
System.out.println("16進数: " + valHex);
System.out.println(" 8進数: " + valOct);
System.out.println(" 2進数: " + valBin);
//文字列を n 進数の int 型に変換する
int valInt2, valInt3;
valInt2 = Integer.valueOf(args[0]);
System.out.println("10 進数だと解釈したときの10進数表現: " + valInt2);
valInt3 = Integer.valueOf(args[0], 2);
System.out.println(" 2 進数だと解釈したときの10進数表現: " + valInt3);
}
}
メソッドvalueOf(String s, 2)は、第一引数を2進数表現だと解釈してInteger型オブジェクトを返します。2進数としても解釈できるように、コマンドライン引数は0か1の組み合わせに限ってください。0か1以外の数を含む引数を与えると、java.lang.NumberFormatExceptionがthrowされます。
D:\java>javac TestInteger.java D:\java>java TestInteger 1011 objInt: 1011 objInt=1011? true int: 1011 double: 1011.0 16進数: 3f3 8進数: 1763 2進数: 1111110011 10 進数だと解釈したときの10進数表現: 1011 2 進数だと解釈したときの10進数表現: 11 D:\java>java TestInteger -1011 objInt: -1011 objInt=1011? false int: -1011 double: -1011.0 16進数: fffffc0d 8進数: 37777776015 2進数: 11111111111111111111110000001101 10 進数だと解釈したときの10進数表現: -1011 2 進数だと解釈したときの10進数表現: -11 D:\java>
ここではint型のラッパー・クラスInteger について紹介しましたが、他の整数値型 byte, short, long のラッパー・クラス Byte, Short, Long についても同じです。
マルチスレッドでの更新の原始性を保証したい場合は、プリミティブ型の場合は修飾子volatileを用い、ラッパークラス型の場合はjava.util.concurrent.atomic.AtomicIntegerを用います。また、IntegerやLongで足りない場合は、java.math.BigIntegerを用います。Integer型オブジェクトは、これらのクラスとの代入互換性を持ちません。但し、何れのクラスもNumberクラスを継承するので、Number型変数へは代入互換です。