我看到这个字符串构建方法在另一个帖子中使用,后来被删除了。
其中一条评论将这种做法描述为“职业限制”
为什么会这样?
答案 0 :(得分:6)
我假设您在这里谈论Java,我会回答。
我能想到不止一个原因。第一个是Java字符串是不可变的,当你用+=
连接字符串时,会创建一个新的String对象,并将对它的引用赋给你的字符串变量。
所以当你这样做时:
for (int i = 0; i < 100; i++)
myString += ...blah...
您正在创建100个新的字符串对象。请注意,旧版本确实会去任何地方,所以它们最终会被垃圾收集一段时间,因为我们没有存储对它们的引用。但是,这仍然不太好,因为垃圾收集需要时间,并且堆中有太多对象会降低应用程序的速度。此外,如果您不打算使用它们,为什么要创建这么多对象。
更好的解决方案当然是使用StringBuilder
;
StringBuilder myString = new StringBuilder();
for (int i = 0; i < 100; i++)
myString.append(...blah...);
String s = myString.toString();
另一个原因可能是,如果您已经知道需要追加哪些字符串(或者至少估计总大小),您可以预分配空间,以便新空间不会当你的字符串变大时,不时需要分配。
最后,您可以使用char的数组,预分配空间,并使用Joel Spolsky对C的标准库字符串连接功能所做的this interesting point做得更好。