Java字符串:创建了多少个对象

Java字符串:创建了多少个对象,java,Java,我问了一个重复的问题,但我在Stack Overflow上讨论了所有类似的问题,但我无法理解 我的代码是: String s1 = "a"; String s2 = "b"; String s3 = s1 + s2; 一,。创建了多少个对象? 2.我们怎么能说对象已经存在于字符串表中 -真的很抱歉口是心非,但我必须知道正确的答案。三个对象将在字符串池中创建 若该字符串在池中可用,那个么它将自动指向该对象,而不是创建新对象 String str1 = "abc"; String str2 = "

我问了一个重复的问题,但我在Stack Overflow上讨论了所有类似的问题,但我无法理解

我的代码是:

String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;
一,。创建了多少个对象? 2.我们怎么能说对象已经存在于字符串表中


-真的很抱歉口是心非,但我必须知道正确的答案。

三个对象将在字符串池中创建

若该字符串在池中可用,那个么它将自动指向该对象,而不是创建新对象

String str1 = "abc";
String str2 = "abc";
字符串中有一个abc,str1和str2都指向同一abc。如果发生任何修改,如str2+=d;然后它将在池中创建一个新对象,因为一旦创建了对象,我们就不能更改其值


注意:字符串是不可变的。

3个对象在这里创建

前两个对象是显而易见的:

String s1 = "a"; // First
String s2 = "b"; // Second
第三个对象是一个新对象

String s3 = "a" + "b"; // Third
它与s1和s2的唯一关系是它包含与它们相同的字母,但它是一个完全独立的对象。它基本上是这样建造的:

String s3 = new String(s1.toString() + s2.toString());
即使两个字符串包含相同的字符序列,它们也不是相同的字符串

String s4 = "foo";
String s5 = "foo";
编辑

由于字符串池,上述两个对象的计算结果都为true,但它们仍然是独立的对象。它们使用flyweight设计模式以节省内存

另一方面:

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

s6 == s7;      // Evaluates to false
s6.equals(s7); // Evaluates to true

在上述示例中,将创建三个对象。 由于字符串是不可变的,每次尝试更改字符串的值时,都会创建一个新对象

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

任何链接或答案都将收到通知。您所说的字符串表是什么意思?如果你想投否决票,请你这样做,但也给我一个答案?我知道这是一个被问了几千次的问题,但我没有得到解释,我没有你们这么聪明。请给出答案。实际上,由于字符串池,s4==s5将计算为真,它将是完全相同的对象。如果你想让它们成为不同的对象,你需要使用一个字符串构造函数,比如String s4=newstringfoothat,没错,谢谢。我在上面编辑。
String s6 = new String("foo");
String s7 = new String("foo");

s6 == s7;      // Evaluates to false
s6.equals(s7); // Evaluates to true
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