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 の単一フィールドが含まれます。

さらにこのクラスは、intString に、Stringint に変換する各種メソッドや、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 仕様を直接ご確認ください。

ここに挙げたのは、次のサンプルで利用するメソッドのみです。

修飾子戻り値型メソッド概要
booleanequals(Object obj) このオブジェクトを指定されたオブジェクトと比較します。
doubledoubleValue() この Integer の値を double 値として返します。
staticStringtoBinaryString(int i) 整数の引数の文字列表現を、基数 2 の符号なし整数として作成します。
staticStringtoHexString(int i) 整数型の引数の文字列表現を、基数 16 の符号なし整数として作成します。
staticStringtoOctalString(int i) 整数の引数の文字列表現を、基数 8 の符号なし整数として作成します。
staticintparseInt(String s) 文字列の引数を符号付き 10 進数の整数型として解析します。
staticintparseInt(String s, int radix) 2 番目の引数に指定された基数を元にして、文字列の引数を符号付き整数として解析します。
StringtoString() この Integer の値を表す String オブジェクトを返します。
staticStringtoString(int i) 指定された整数を表す新しい String オブジェクトを返します。
staticStringtoString(int i, int radix) 2 番目の引数を基数として、1 番目の引数の文字列表現を作成します。

サンプル

次のサンプルは、コマンドライン引数の文字列を Integer 型のオブジェクトにラッピングします。

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.NumberFormatExceptionthrowされます。

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を用います。また、IntegerLongで足りない場合は、java.math.BigIntegerを用います。Integer型オブジェクトは、これらのクラスとの代入互換性を持ちません。但し、何れのクラスもNumberクラスを継承するので、Number型変数へは代入互換です。



Copyright © 2001-2008 SUGAI, Manabu. All Rights Reserved.