以下はインスタンスメソッドのコードスニペットです
String x = new StringBuffer().append("a").append("b").append("c").toString()
私は印象を受けています。最初に新しい文字列バッファが作成され、次にaが最後に文字列バッファの最後に追加されます。bとcも同様です。その後、stringbufferはstringに変換されます。したがって、私によると、2つのオブジェクトが作成されます(1つは文字列バッファ用、もう1つは文字列用)。正しい?基本的に、私によると、文字列 "a"、 "b"、"c"の中間オブジェクトは作成されません。これは正しいですか?
編集:-すべての応答に従って、オブジェクトは文字列リテラル "a"、 "b"、 "c"に対して作成されるように見えますが、リンクhttp://docs.oracle.com/javase/1.4でアクセスすると。 2 / docs / api / java / lang / StringBuffer.html#toString()、これは一時的な文字列を作成するべきではありません。「全体として、これにより多くの一時的な文字列が作成されるのを回避できます。」を検索します。このリンクで。1.4.2の場合であることに同意しましたが、基本的には1.6でも同じであることを願っています
はい、上記の代わりに以下を行うと、5つのオブジェクトが作成されます。「a」、「b」、「c」の場合は3つ。1つは文字列バッファ用です。そしてついにstringbufferから変換された文字列のために。「a」、「b」、「c」、最後に文字列「abc」のオブジェクトはプールされすぎて、生涯存在します
String str1="a";
String str2="b";
String str3="c";
String x = new StringBuffer().append(str1).append(str2).append(str3).toString()
上記の理解は正しいですか?