0
基本データ型→ラッパークラス
Integer n = new Integer(12);
Integer n = Integer.valueOf(12);
どっちも基本データ型から、ラッパークラスへ変換しているのですが、どういった使い分けをすればよいでしょうか?
好みの問題でしょうか。
何か例があればご教示ください。
0
Integer n = new Integer(12);
Integer n = Integer.valueOf(12);
どっちも基本データ型から、ラッパークラスへ変換しているのですが、どういった使い分けをすればよいでしょうか?
好みの問題でしょうか。
何か例があればご教示ください。
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ヶ月以上経過しているので、回答を書き込むことはできません。