String s1=new String("Java"); /* 1st object created */
String s2="Tech"; /* 2nd Object */
s1+=s2;
我在这里混淆了创建新对象还是存储在前一个对象中的结果。
创建了多少个对象
答案 0 :(得分:0)
str1 += str2
相当于执行以下操作:
str1 = new StringBuilder().append(str1).append(str2).toString();
对toString的最终调用将创建一个新对象,并且引用将由变量str1保存在第3行代码中。堆String中的早期对象(" Java")将为垃圾收集做好准备。
Java在字符串的情况下与c类似,它创建新对象而不是修改现有对象。这是因为java中的字符串是不可变的。
答案 1 :(得分:-1)
String s1=new String("Java"); /* 2 objects created as 'new' is used - s1 (holds reference to new String) and string literal "Java" */
String s2="Tech"; /* 3rd Object - "Tech", s2 just holds reference to it */
s1+=s2; /* 4th Object created, which is concatenation of s1 and s2. s1 holds reference to it.
所以创建了4个对象。