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型はプリミティブ型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  i int値。
 * @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   value   Integerオブジェクトで表現される値。
 */
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 型のオブジェクトにラッピングします。

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.