通常认为,在Java中使用StringBuilder作为字符串连接更可取.一直都是这样吗?

我的意思是:创建一个StringBuilder对象,调用append()方法,最后调用toString(),然后将现有字符串与+运算符连接起来,以获得两个字符串,这样的开销已经更小了吗?还是只建议多(两个以上)字符串?

如果有这样一个阈值,它取决于什么(可能是字符串长度,但以何种方式)?

最后,你会用+串联的可读性和简洁性换取StringBuilder在较小的情况下的性能,比如两个、三个或四个字符串吗?

obsolete Java optimization tipsJava urban myths中提到将StringBuilder显式用于规则级联是过时的.

推荐答案

如果在循环中使用字符串连接,比如,

String s = "";
for (int i = 0; i < 100; i++) {
    s += ", " + i;
}

然后你应该用StringBuilder(不是StringBuffer)而不是String,因为它速度更快,占用的内存更少.

如果你只有一句话,

String s = "1, " + "2, " + "3, " + "4, " ...;

然后你可以使用String,因为编译器会自动使用StringBuilder.

Java相关问答推荐

使用Java使用fabric.io获取当前部署名称

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

虚拟线程似乎在外部服务调用时阻止运营商线程

如何计算内循环的时间复杂度?

CSS应用于一个端点,但不应用于Thymeleaf中的另一个端点

Android Studio—java—在onBindViewHolder中,将断点和空白添加到BackclerView中

XPages-在第二次点击按钮之前延迟

名称冲突具有相同的擦除

Spring Boot Maven包

无法使用Java&;TestContainers获取AWS SQS队列的属性

将响应转换为带值的键

Java-动态绑定-问题-了解

在Ubuntu 23.10上使用mp3创建JavaFX MediaPlayer时出错

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

找出承载Cargo 的最小成本

用于Java的Visual Studio代码完成不起作用

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

Java中的一个错误';s stdlib SocksSocketImpl?

Java返回生成器的实现