java - 当你在 Java 中使用 "alter" "+="字符串时会发生什么?

标签 java string performance memory concatenation

我知道 Java 中的 String 变量是不可变的,因此不能更改。

String myString = "Hello.";
myString += " ";
myString += "My name is Kevin"; 

每次我们向这个 String()“添加”一些东西时,我们实际上是在创建一个新的 String(),但是它与它的字符串同名正在连接。这是否意味着内存中有多个引用变量“myString”?

最佳答案

每次您使用 +=“修改”/连接 String 时,您都在创建一个新的 String 对象并替换引用使用新创建的 String 命名为 myString。所以不,内存中只有一个引用,但是引用指向的对象每次都在变化。字符串是不可变的,因此无法“就地”修改对象。

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.

有一个great answer on the Programmer's StackExchange解释 为什么 String 在 Java 中是不可变的,以及有关其具体工作原理的更多详细信息。

最好的方法是只使用 StringBuilder() 类:

String myStringBuilder = new StringBuilder("Hello.");
myStringBuilder.append(" ");
myStringBuilder.append("My name is Kevin");

System.out.println(myStringBuilder.toString());

但是,现代 Java 编译器会自动将 String 连接转换为 StringBuilder 操作。

关于java - 当你在 Java 中使用 "alter" "+="字符串时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38280836/

相关文章:

android - Android Profile GPU渲染中的红色和黄色单杠是什么意思

java - 如果有必要的数据库

java - 获取文件路径不是apache tomcat路径

c++ - 修改 std::string::op[] 的结果是否合法?

Java 空字符串拆分 ArrayIndexOutOfBoundsException

css - 大小单位 : rem, em 和 px 之间的速度测试

performance - 处理大输入时 Spark 性能非常慢

java - 我可以在哪里放置 SOAP 行动?

java - 如何在 play-framework 中使用 json 数据重定向到另一个 Action

python - 初学者问题;字符串索引超出范围