Javaの文字列結合パフォーマンス その1

2015年3月22日日曜日

Java パフォーマンス

よくJavaでは文字列結合で+演算子より、StringBuilderを使ったほうがパフォーマンスがいいと言われるけれど、それはこういうケースだろう。
String s = "";
for (String e : stringList) {
    s += e;
}
ループ中で文字列を次々に連結させていく操作だ。
この場合はループの外でStringBuilderインスタンスを一度だけ生成して使ったほうが効率がいい。
StringBuilder sb = new StringBuilder();
for (String e : stringList) {
    sb.append(e);
}
String s = sb.toString();
ちなみにJava8ではStringにjoinメソッドが追加されたので、そちらを使うのが便利。

しかしながら、定数文字列と変数から文字列を作り出す場合にも同じようにStringBuilderを使っているケースが見られる。
StringBuilder sb = new StringBuilder();
sb.append("Hello, ");
sb.append(name);
sb.append("!");
String s = sb.toString();
この場合は+演算子で結合したほうが見た目はわかりやすい。
String s = "Hello, " + name + "!";
しかし、パフォーマンス的にはStringBuilderでappendしたほうが速い...のだろうか?