首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >何时在Java中使用StringBuilder

何时在Java中使用StringBuilder
EN

Stack Overflow用户
提问于 2011-01-10 16:52:31
回答 9查看 292.5K关注 0票数 381

一般认为,在Java语言中使用StringBuilder进行字符串连接是更可取的。一直都是这样吗?

我的意思是:创建一个StringBuilder对象,调用append()方法,最后toString()的开销是否已经比将现有字符串与两个字符串的+操作符连接在一起的开销更小,还是只对(两个以上)字符串是可取的?

如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?

最后,在两个、三个或四个字符串这样的较小情况下,您会牺牲+连接的可读性和简洁性来换取StringBuilder的性能吗?

obsolete Java optimization tipsJava urban myths中,显式地将StringBuilder用于常规串联被认为是过时的。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-01-10 17:10:43

如果您在循环中使用字符串连接,如下所示,

代码语言:javascript
复制
String s = "";
for (int i = 0; i < 100; i++) {
    s += ", " + i;
}

然后,您应该使用StringBuilder (而不是StringBuffer)而不是String,因为它更快且消耗更少的内存。

如果您只有一条语句,

代码语言:javascript
复制
String s = "1, " + "2, " + "3, " + "4, " ...;

因为编译器将自动使用StringBuilder,所以您可以使用Strings。

票数 535
EN

Stack Overflow用户

发布于 2011-01-10 17:42:11

拉尔夫的回答很棒。我更喜欢使用StringBuilder类来构建/修饰字符串,因为它的用法更像是生成器模式。

代码语言:javascript
复制
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();
}

它可以用作构建字符串的帮助器/构建器,而不是字符串本身。

票数 52
EN

Stack Overflow用户

发布于 2011-01-10 17:04:50

一般来说,总是使用可读性更好的代码,只有在性能有问题的情况下才进行重构。在这种特定情况下,大多数最新的JDK实际上在任何情况下都会将代码优化为StringBuilder版本。

如果您在循环中或在编译器无法轻松优化的一些复杂代码中进行字符串连接,则通常只需要手动执行此操作。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4645020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档