一般认为,在Java语言中使用StringBuilder
进行字符串连接是更可取的。一直都是这样吗?
我的意思是:创建一个StringBuilder
对象,调用append()
方法,最后toString()
的开销是否已经比将现有字符串与两个字符串的+
操作符连接在一起的开销更小,还是只对(两个以上)字符串是可取的?
如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?
最后,在两个、三个或四个字符串这样的较小情况下,您会牺牲+
连接的可读性和简洁性来换取StringBuilder
的性能吗?
在obsolete Java optimization tips和Java urban myths中,显式地将StringBuilder
用于常规串联被认为是过时的。
发布于 2011-01-10 17:10:43
如果您在循环中使用字符串连接,如下所示,
String s = "";
for (int i = 0; i < 100; i++) {
s += ", " + i;
}
然后,您应该使用StringBuilder
(而不是StringBuffer
)而不是String
,因为它更快且消耗更少的内存。
如果您只有一条语句,
String s = "1, " + "2, " + "3, " + "4, " ...;
因为编译器将自动使用StringBuilder
,所以您可以使用String
s。
发布于 2011-01-10 17:42:11
拉尔夫的回答很棒。我更喜欢使用StringBuilder类来构建/修饰字符串,因为它的用法更像是生成器模式。
public String decorateTheString(String orgStr){
StringBuilder builder = new StringBuilder();
builder.append(orgStr);
builder.deleteCharAt(orgStr.length()-1);
builder.insert(0,builder.hashCode());
return builder.toString();
}
它可以用作构建字符串的帮助器/构建器,而不是字符串本身。
发布于 2011-01-10 17:04:50
一般来说,总是使用可读性更好的代码,只有在性能有问题的情况下才进行重构。在这种特定情况下,大多数最新的JDK实际上在任何情况下都会将代码优化为StringBuilder版本。
如果您在循环中或在编译器无法轻松优化的一些复杂代码中进行字符串连接,则通常只需要手动执行此操作。
https://stackoverflow.com/questions/4645020
复制相似问题