Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

基本データ型→ラッパークラス

Integer n = new Integer(12);
Integer n = Integer.valueOf(12);

どっちも基本データ型から、ラッパークラスへ変換しているのですが、どういった使い分けをすればよいでしょうか?

好みの問題でしょうか。
何か例があればご教示ください。

6

回答

79555

閲覧

6件の回答

評価

0

使い分け、といいますか…
valueOfを見てみると、
    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
        return new Integer(i);
    }
こんな感じになってます。

評価

0

私は、

ラッパークラスの場合、

valueOfを利用してコンストラクタは利用しない

ようにしているかな

オブジェクトの作成速度が、2010-02-05 13:26の理由で違うので。

評価

0

valueOf()は予め用意されたインスタンス(キャッシュ)を使うので、利用する時点で作成しない分だけ速いし効率がいい。
ただし、キャッシュにヒットしなければ結局2番目と同じことをする。
なので最初からヒットしないのが分かりきっていたり、ヒットする確率が極端に低いのであれば、valueOf()を使う意味は薄い。

正直思い浮かばないが、ある時点で使うInteger(1)と別のところのInteger(2)が同一インスタンスであるとまずいケースも、あるかも知れない。

評価

0

http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Integer.html#valueOf(int)

をみると、「新規 Integer インスタンスが不要な場合・・云々」とあります。

私も、新規Integerが必要な場合・・というのが思い浮かばないので・・valueOfをつかいいます。

参考(逆に混乱させてしまうかもしれないが)
Integer i1 = new Integer(3);
Integer i2 = new Integer(3);
System.out.println("new    :" + (i1 == i2));//(*1)
Integer i3 = Integer.valueOf(3);
Integer i4 = Integer.valueOf(3);
System.out.println("valueOf:" + (i3 == i4));//(*2)

"=="で比較すると
(*1)は false に必ずなり。
(*2)は true になる可能性(falseになることもある)がある。

評価

0

皆様
ご回答ありがとうございます。

私もvalueOf()を使用致します。
大変勉強になりました。

評価

0

分かると思うけど。

>ある時点で使うInteger(1)と別のところのInteger(2)
これじゃnew Integer(1)とnew Integer(2)に読めるな…。
同じ値の、その1その2ってことね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。