1. ホーム
  2. java

[解決済み] Stringがあるのに、なぜStringBuilderなのか?

2023-04-24 19:21:34

疑問点

私はちょうど StringBuilder に初めて遭遇し、驚きました。Java にはすでに非常に強力な String クラスがあるからです。

なぜ2番目の String クラスがあるのでしょうか?

についてもっと知りたいのですが、どこで知ることができますか? StringBuilder ?

どのように解決するのですか?

String は追加を許しません。に対して呼び出す各メソッドは String に対して呼び出す各メソッドは新しいオブジェクトを生成してそれを返します。これは String は不変であり、内部の状態を変更することができないからです。

一方 StringBuilder はミュータブルです。呼び出すときに append(..) を呼び出すと、新しい文字列オブジェクトを作るのではなく、内部の文字配列が変更されます。

したがって、それはより効率的に持つことができます。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 500; i ++) {
    sb.append(i);
}

よりも str += i では500の新しい文字列オブジェクトが作成されます。

この例では、ループを使っていることに注意してください。heliosがコメントで指摘しているように、コンパイラは以下のような式を自動的に変換します。 String d = a + b + c のような表現に自動的に変換します。

String d = new StringBuilder(a).append(b).append(c).toString();

また StringBuffer に加えて StringBuilder . 違いは、前者にはシンクロナイゼーションされたメソッドがあることです。ローカル変数として使用する場合は StringBuilder . もし、複数のスレッドからアクセスされる可能性がある場合は StringBuffer (を使います(これはもっと稀です)。