在循环中使用+ =表示字符串,这是不好的做法吗?

and*_*rew 1 string loops concatenation

我看到这个用于另一个帖子的字符串构建方法已被删除.

其中一条评论将这种做法描述为"职业限制"

为什么会这样?

Dhr*_*oor 8

假设你在这里谈论Java,我会回答.

我能想到不止一个原因.第一个是Java字符串是不可变的,当你+=进行连接字符串时,会创建一个新的String对象,并将对它的引用赋给你的字符串变量.

所以当你这样做时:

for (int i = 0; i < 100; i++)
    myString += ...blah...
Run Code Online (Sandbox Code Playgroud)

您正在创建100个新的字符串对象.请注意,旧版本确实会去任何地方,所以它们最终会被垃圾收集一段时间,因为我们没有存储对它们的引用.但是,这仍然不太好,因为垃圾收集需要时间,并且堆中有太多对象会降低应用程序的速度.此外,如果您不打算使用它们,为什么要创建这么多对象.

StringBuilder当然,更好的解决方案是使用;

StringBuilder myString = new StringBuilder();
for (int i = 0; i < 100; i++)
    myString.append(...blah...);
String s = myString.toString();
Run Code Online (Sandbox Code Playgroud)

另一个原因可能是,如果你已经有一个什么样的弦乐器想法,你需要追加(或至少总规模的估计),你可以预分配的空间,使新的空间并不需要时不时进行分配随着你的字符串越来越大

最后,您可以使用char的数组,预分配空间,并使用Joel Spolsky对C的标准库字符串连接功能所做的这个有趣的观点做得更好.