使用链式追加和使用多个+进行连接之间有什么区别

问题描述 投票:0回答:3

正在尝试在StringBuilder中附加多个字符串,使用

有什么主要区别吗
String str1 = "some";
String str2 = "string";

现在,

sb.append(str1).append(str2); // using chained appends

并使用

sb.append(str1 + str2); // using '+' operator

我的IDE建议我使用第一种方法,它们在线程安全性或类似方面有区别吗?

java string stringbuilder
3个回答
0
投票

在幕后,编译器将String串联替换为StringBuilder.append,但是有限制。在循环内部,它为每次迭代创建一个新的StringBuilder,调用toString并将其附加到外部StringBuilder。方法调用也是如此,因为它需要方法调用的值。编译后,您的第二个版本将显示为

sb.append(new StringBuilder().append(str1).append(str2).toString);

这显然不是最佳选择,而第一个版本保持不变。


0
投票

您的第一个方法将不会创建任何对象,但已创建的3个对象除外。但是,第二种方法将不必要地先创建另一个对象作为字符串(str1 + str2),然后追加到StringBuilder对象。

第一种方法比第二种方法好。


0
投票

使用StringBuilder的目的是避免创建不必要的String对象。 Java中的字符串不可修改,这意味着每次将两个字符串连接在一起时,都会创建第三个字符串。例如下面的代码

String concatenation = str1 + str2 + str3;

创建不必要的字符串str1 + str2的结果,然后向其中添加str3并将其结果分配给“串联”。

StringBuilder允许您放置要连接的所有String,而无需创建中间对象。然后,当您准备就绪时,就可以得出最终结果。

如果您在一个循环中连接多个String,则使用StringBuilder特别重要。通过写这样的东西

sb.append(str1 + str2);

您缺少StringBuilder的要点。

© www.soinside.com 2019 - 2024. All rights reserved.