重複した質問をしていますが、スタック オーバーフローでこのような質問をすべて確認しましたが、理解できません。
私のコードは次のとおりです。
String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;
1. いくつのオブジェクトが作成されますか? 2. オブジェクトが既に String Table に存在していると、どのように言えますか?
-重複して本当に申し訳ありませんが、正しい答えを知っている必要があります。
重複した質問をしていますが、スタック オーバーフローでこのような質問をすべて確認しましたが、理解できません。
私のコードは次のとおりです。
String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;
1. いくつのオブジェクトが作成されますか? 2. オブジェクトが既に String Table に存在していると、どのように言えますか?
-重複して本当に申し訳ありませんが、正しい答えを知っている必要があります。
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
は不変です。
上記の例では、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
ここでは 3 つのオブジェクトが作成されます。
最初の 2 つのオブジェクトは明らかです。
String s1 = "a"; // First
String s2 = "b"; // Second
3 番目のオブジェクトは新しいオブジェクトです
String s3 = "a" + "b"; // Third
唯一の関係は、それらと同じ文字が含まれていることですが、完全に独立したオブジェクトですs1
。s2
基本的には次のように構築されます。
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