What is happening when you “alter” a string in Java using “+=”?
我理解Java中的字符串变量是不可变的,因此不能更改。
1 2 3 |
每次我们"添加"到这个
每次将
String is an immutable class in Java. An immutable class is simply a class whose instances cannot be modified. All information in an instance is initialized when the instance is created and the information can not be modified. There are many advantages of immutable classes.
号
程序员的StAcExchange有一个很好的答案,解释了为什么EDCOX1的0个s在Java中是不可变的,以及更多的细节。
最好的方法是只使用
1 2 3 4 5 |
然而,EDCOX1〔0〕级联被现代Java编译器自动转换为EDCOX1×8操作。
Java使用字符串池。这是字符串interning概念的一个实现。
In computer science, string interning is a method of storing only one copy of each distinct string value, which must be immutable. Interning strings makes some string processing tasks more time- or space-efficient at the cost of requiring more time when the string is created or interned. The distinct values are stored in a string intern pool.
号
这意味着对于每个字符串,都会向字符串池添加该特定字符串的副本。保存该字符串的每个变量都指向字符串池中的副本。
字符串
1 |
号
变量
1 | myString +=""; |
字符串
1 | myString +="My name is Kevin"; |
。
字符串
1 |
号
上面创建了一个新的
1 | myString +=""; |
在这里您可以看到
注意,与
不,您不能访问以前的引用,它留给垃圾收集器收集。换句话说,内存中只有一个引用保存变量的当前值("我的名字是Kevin")。
请注意,如果要经常更改字符串变量,则应使用StringBuilder类。
这里是到StringBuilder类文档的链接你也可以在网上找到很多使用这个课程的例子。
https://docs.oracle.com/javase/8/docs/api/java/lang/stringbuilder.html网站
这里还有你问题的详细答案
何时用Java垃圾回收字符串
这里是定义
String is a immutable class, it means there is no modification can be made in object once it created.
号
这里,
1 2 3 | String myString ="Hello."; //create a Object String contain Hello and refer to myString myString +=""; myString +="My name is Kevin"; |
。
当执行
在执行
Now, Your both earlier Objects
"Hello" and"Hello/s" is not referenced by any other reference variable, So, It is eligible for garbage Collection.
号
谢谢