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型はプリミティブ型intをオブジェクト型にラッピングします。32ビット整数値を表現し、次のstatic
final定数が定義されています。
/**
* int型が持つことのできる最低値を保持した定数。 -231.
*/
public static final int MIN_VALUE = 0x80000000;
/**
* int型が持つことのできる最大値を保持した定数。 231-1.
*/
public static final int MAX_VALUE = 0x7fffffff;
/**
* int値を2の補数2進数形を用いて表現したビット数。
*
* @since 1.5
*/
public static final int SIZE = 32;
/**
* プリミティブ型intを表現するClassインスタンス。
*
* @since JDK1.1
*/
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
基本的な使い方は、メソッドvaluOf(int i)で、プリミティブ型の32ビット整数をオブジェクトに変換します。普通のコンストラクターも用意されています。int型とInteger型の間の相互型変換は、自動ボクシング/アンボクシングがサポートされています。
/** * 指定されたint値を表現するIntegerインスタンスを返す。 * 新しいIntegerインスタンスが必要で無い場合は、このメソッドは、 * 一般的にコンストラクター{@link #Integer(int)}よりも優先して使われます。 * この理由は、このメソッドは頻繁に必要とされる値をキャッシュすることで、 * 空間的・時間的なパフォーマンスを、著しく少なく済ませられることが多いからです。 * * @param iint値。 * @return iを表現するIntegerインスタンス。 * @since 1.5 */ public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); } /** * 指定されたint値を表現する、新しいInteger型オブジェクトを構築する。 * * @param valueIntegerオブジェクトで表現される値。 */ public Integer(int value) { this.value = value; } /** *Integerの値。 * * @serial */ private final int value;
32ビット整数では足りない可能性がある場合は、64ビット整数であるLong型か、BigInteger型を使ってください。
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型変数へは代入互換です。