4

重複の可能性:
java文字列の連結

ソースによると、これconcatは次のように実装されています。

   public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    }

+文字列に関しては、実装は異なりますか?どのように?との間にパフォーマンスの違いは+ありconcatますか?いつ他のものよりも選ばれるべきですか?

4

1 に答える 1

7

これは私が作ったばかりのテストです:

これらの 3 つの命令でクラスを作成しました。

    String s1 = "foo";
    String s2 = "bar";
    String s3 = s1 + s2;

次に、生成された .class ファイルを取得し、JAD 逆コンパイラを使用して逆コンパイルしました。これは、コードが再生成されたソースに表示される方法です。

    String s = "foo";
    String s1 = "bar";
    String s2 = (new StringBuilder()).append(s).append(s1).toString();

つまり、これが + と concat の違いです。

concat() は、作成するオブジェクトが少なくて済むため、常に StringBuilder よりも優れていると思います。ループ内で文字列を繰り返し追加する場合は、StringBuilder を選択できます。この場合、concat は毎回新しい String を作成する可能性がありますが、StringBuilder は内部バッファを展開するだけです。ただし、この最後のシナリオで StringBuilder が最適である場合でも、ループでは concat() が +, よりも優れていると言えます。

于 2012-12-31T01:11:59.543 に答える