-3

重複した質問をしていますが、スタック オーバーフローでこのような質問をすべて確認しましたが、理解できません。

私のコードは次のとおりです。

String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;

1. いくつのオブジェクトが作成されますか? 2. オブジェクトが既に String Table に存在していると、どのように言えますか?

-重複して本当に申し訳ありませんが、正しい答えを知っている必要があります

4

3 に答える 3

1

Stringここでプールに 3 つのオブジェクトが作成されます。

String s1 = "a"; // 1st Object
String s2 = "b"; // 2nd Object
String s3 = s1 + s2; // "ab" 3rd Object.

string がプールで使用可能な場合、新しいオブジェクトを作成する代わりに、そのオブジェクトを自動的に指します。

String str1 = "abc";
String str2 = "abc";

1 つの "abc" がstringあり、str1 と str2 の両方が同じ "abc" を指しています。そのような変更が発生した場合、オブジェクトが作成されるとその値を変更できないためstr2 +="d";、プールに新しいオブジェクトが作成されます。"abcd"

注 :Stringは不変です。

于 2013-01-30T12:03:02.917 に答える
0

上記の例では、3つのオブジェクトが作成されます。Stringは不変であるため、stringの値を変更しようとするたびに、新しいオブジェクトが作成されます。

String s1 = "a" // 1st object
String s2 = "b" // 2nd object
String s3 = s1+ s2 // in this case a new onject with value "ab" will be created
于 2013-01-30T12:08:38.803 に答える
0

ここでは 3 つのオブジェクトが作成されます。

最初の 2 つのオブジェクトは明らかです。

String s1 = "a"; // First
String s2 = "b"; // Second

3 番目のオブジェクトは新しいオブジェクトです

String s3 = "a" + "b"; // Third

唯一の関係は、それらと同じ文字が含まれていることですが、完全に独立したオブジェクトですs1s2基本的には次のように構築されます。

String s3 = new String(s1.toString() + s2.toString());

2 つの文字列に同じ文字列が含まれていても、それらは同じ文字列ではありません。

String s4 = "foo";
String s5 = "foo";

編集

s4 == s5;       // Evaluates to true
s4.equals(s5);  // Evaluates to true

上記の両方は、文字列プーリングのために true と評価されますが、依然として別個のオブジェクトです。メモリを節約するためにフライウェイト デザイン パターンを使用します。

一方で:

String s6 = new String("foo");
String s7 = new String("foo");

s6 == s7;      // Evaluates to false
s6.equals(s7); // Evaluates to true
于 2013-01-30T12:07:33.327 に答える