2012/05/07

IntegerからStringへの型変換についてのめも

JavaでIntegerからStringへ型変換する時、ふとtoStringとvalueOfってどう使い分ければいいのかが気になったのでちょっと調べてみた時のメモ。

まずIntegerからStringへの型変換は

Integer num = 12345;
String str = null;
//  パターン1
str = num.toString();
//  パターン2
str = String.valueOf(num);
//  パターン3
str = "" + num;

の3通りがあるらしい。
10000000回ループして変換掛けまくってみたところ、速度的には

パターン1:334ms
パターン2:337ms
パターン3:776ms

って感じだった。
パターン1と2はほとんど差は無いけど、パターン3は劇的に遅かった。

※ まあコード的にもあまり好みじゃ無いからもともと使う気無いけど・・・、なんかphpみたいだし。
※※ とは言え、Integerにint突っ込むのも似たような事なんだけど・・・Zzz

ってことはまぁ、toStringもvalueOfもどっち使っても実行速度的には大差ないのかな。
ちょろっと実験しただけなので細かいところ見たら差があるのかもしれないけど。

ぁ、でも仮に変換対象がnullだった時に、valueOfはStringの"null"を返すけど、toStringの方はNullPointerExceptionが返って来るから、差があるとすればこの辺になるのかな??

あまり細かいところまで見てはないから結論は出てないけど、結局"適宜使い分ける"って事なのかな。
時間があるときもっと調べてみよ。



2 件のコメント:

  1. String.javaのソースを見ると、こうなってるので、ちょうどif文の処理時間が3msですね。
    "" + numは、どうなんでしょうね。調べて見ます。
    public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
    }

    返信削除
    返信
    1. コメントありがとうございます。
      なるほど、最終的にはどちらも結局toStringが呼ばれているのですね。
      勉強になりました。

      "" + numの方ですが、""を使用する度に新しいStringオブジェクトのインスタンスが生成されるので、前2者と比較するとインスタンスを生成する箇所が多くなる為に速度が落ちているのではないかなぁ、と予想しています…。

      削除