int型変数をIntegerオブジェクトにするメリットはJavaTips 〜Javaプログラミング編

» 2006年11月22日 10時00分 公開
[平野正喜@IT]

 ラップクラスは、対応するプリミティブ型(基本型)の値をオブジェクトにラップします。例えば、Integerクラスはint型の値をラップし、Integerクラスのオブジェクトにはint型の単一フィールドが含まれます。ラップクラスは、型を変換する各種のメソッドや、その型の値を処理するときに便利なメソッドを提供してくれます。

 まず、int型の値をIntegerオブジェクトにラップすることで利用できる、Integerクラスの提供する機能の活用例を示しましょう。

 下記は、int型の値をオブジェクトと比較可能なら比較し、でなければ比較不可と返すメソッドです。IntegerクラスのcompareToメソッドを使っています。compareToメソッドは、オブジェクトが Integer の場合は大小比較を行い、そうでない場合は、ClassCastException がスローされます。

ラップすることで、IntegerクラスのcompareToメソッドを利用するプログラムの一例 ラップすることで、IntegerクラスのcompareToメソッドを利用するプログラムの一例

オブジェクトにのみ可能なメリット

 Javaはオブジェクト指向言語であり、データ処理の基本もオブジェクトを対象としています。しかし、int型のようなプリミティブ型はオブジェクトではないので、VectorやArrayListのようなコレクションには格納できないなど、活用の幅が限られてしまいます。

 また、メソッドのパラメータにプリミティブ型を用いると値渡しになりますので、オブジェクトのように参照渡しができず、値のコピーが行われるため、効率が低くなります。これらを解決するのも、Integerのようなラップクラスです。

 ラップクラス活用の一例として「float型の値を与えると、その値の小数点以下が0であればint型の整数として表示し、そうでなければfloat型の実数として表示する」プログラムを作成しました。int型とfloat型の戻り値を同時に持つメソッドはできませんし、2つのメソッドにしてオーバロードしようにも、どちらも同じfloat型の引数ですから、うまくいきません。そこで、Integerクラスと、Floatクラスを使い、双方を扱えるObjectクラスを戻り値とする1つのメソッドにしたのが下図のプログラムです。

ラップしてオブジェクトにすることで、intとfloatの戻り値を持つメソッドが実現 ラップしてオブジェクトにすることで、intとfloatの戻り値を持つメソッドが実現

 このように、Integerのようなラップクラスを活用することによって、オブジェクトにのみ可能なメリットが得られるわけです。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。