java - 为什么我使用 .concat() 和 += 使用 Java 字符串得到不同的输出?

标签 java string concatenation

学习 OCAJ7

我知道 String 对象是不可变的。我知道在 String 对象上使用诸如 .concat() 之类的方法只会创建一个具有相同引用名称的新 String 对象。然而,我很难理解以下内容:

String str1 = "str1";
String str2 = "str2";
System.out.println( str1.concat(str2) );
System.out.println(str1);

// ouputs
// str1str2
// str1

String str3 = "fish";
str3 += "toad";
System.out.println(str3);

// outputs
// fishtoad

如果字符串是不可变的,为什么使用+=连接会影响原始String对象,而.concat()却不会?如果我只想使用 += 连接字符串,那么使用 String 是否比使用 StringBuilder 更好,反之亦然?

最佳答案

因为您正在捕获 str3 中新生成的 String 实例的引用

str3 += "toad";

str3 = str3 + "toad"

关于java - 为什么我使用 .concat() 和 += 使用 Java 字符串得到不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830996/

相关文章:

java - 在 Jboss EAP 中遇到 IllegalArgumentException

java - 如何为 JIRA API 生成 jwt token

javascript - 两个数组,根据第一个数组的重复值对第二个数组进行分组并形成一个字符串

java - 将 concat 与 int 一起使用? (java)

java - Servlet 声明式安全

java - spring data jpa的奇怪行为

python - 日期时间类型错误: not all arguments converted during string formatting

python - 从一个列表中查找以另一个列表中的字符串开头的字符串

javascript - 如何在纯 Javascript 中连接 getElementsByClassName 的结果?

javascript - 将对象键连接/推送到数组