Java 新对象是否可以存储在以前的对象中

Java 新对象是否可以存储在以前的对象中,java,string,Java,String,我在这里混淆了新对象是创建的还是存储在前一个对象中的结果 创建了多少个对象 String s1=new String("Java"); /* 1st object created */ String s2="Tech"; /* 2nd Object */ s1+=s2; 总共创建了4个对象 String s1=new String("Java"); /* 2 objects created as 'new' is used - s1 (holds

我在这里混淆了新对象是创建的还是存储在前一个对象中的结果

创建了多少个对象

String s1=new String("Java");    /* 1st object created */
String s2="Tech";                /* 2nd Object */
s1+=s2;   
总共创建了4个对象

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.
相当于执行以下操作:

str1 += str2 
最后一次调用toString将创建一个新对象,引用将由变量str1保存在第三行代码中。堆StringJava中的早期对象将准备好进行垃圾收集


Java与c在字符串方面不同,它创建一个新对象,而不是修改现有对象。这是因为java中的字符串是不可变的

只有两个。如果这发生在汇编上,那么在这个问题上有很多问题。发帖前你没有搜索过吗?检查这些:字符串是不可变的。它们不会改变。你总是会得到一个新的。创建了两个对象!我认为s1有一个引用,所以它不是一个不同的实例。你们能提供一些你们所说的东西的来源吗?这正是我所提到的——s1包含对新字符串的引用。您可以对同一个对象有任意数量的引用,但这里的对象是新的String对象,另一个是String literal Java。字符串文本存储在Java的字符串池中,如果您有另一行:String s3=new StringJava//则将使用相同的字符串文本Java对象,所以只会创建一个对象-新字符串。但是你说使用了两个创建为“新”的对象,但我怀疑你能否说文字是一个对象,因为我们可以区分字符串对象和字符串文字。即使创建的对象是Java和new Stringjava,s1也不是一个对象,而是一个保存对该对象引用的变量;我的意思是,如果不使用new,那么只会创建一个对象,即字符串文本。是的,字符串文字也是一个普通的字符串对象,只是JVM将其缓存在字符串池中。使用“new”时,它强制分配新对象。
str1 = new StringBuilder().append(str1).append(str2).toString();