5

だから私はキャシー シエラの本から SCJP のために勉強しています。文字列の章では、これは質問です:

String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat( "fall ");
s2.concat(s1);
s1 += "winter";
System.out.println(s1+" "+s2);
---------------------------
What's the output, and how many string objects and ref variables are created?

出力は春冬春夏で、2 つの参照変数がありますが、それで問題ありません。

次に、作成された 8 つの文字列オブジェクト (春、夏、春夏など) があり、それらを参照するものが何もないために失われたものを含みます。

ただし、最後の sysout からは何も含まれません。

私の質問は、コードの最後の行で、s1 と s2 がスペースで連結されているため、これも新しいオブジェクトを作成しないのですか? それとも、表示用に文字列バッファに渡され、新しいオブジェクトは作成されませんか?

これは明らかに非常に基本的なものであり、他の場所を調べましたが、これに直接答えるものはありませんでした。私の理解では、そこにも新しいオブジェクトが作成されるはずですが、試験のために確認する必要があります。考え?

前もって感謝します!

4

2 に答える 2

2

別のより明確な質問に答えます。次のコード スニペットに含まれる String インスタンスの数は次のとおりです。

String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat( "fall ");
s2.concat(s1);
s1 += "winter";
System.out.println(s1+" "+s2);
  1. 文字列リテラル「春」
  2. 文字列リテラル「夏」
  3. s1 と「夏」の連結
  4. 文字列リテラル「秋」
  5. s1 と "fall" の連結
  6. s2 と s1 の連結
  7. 文字列リテラル「冬」
  8. s1 と「winter」の連結
  9. 文字列リテラル " "
  10. sysout での s1 と s2 の連結

なので全部で10個。

于 2013-05-22T11:11:05.010 に答える