.jpg)
给定以下 2 种实现,首选哪一种:toString()
public String toString(){
return "{a:"+ a + ", b:" + b + ", c: " + c +"}";
}
或
public String toString(){
StringBuilder sb = new StringBuilder(100);
return sb.append("{a:").append(a)
.append(", b:").append(b)
.append(", c:").append(c)
.append("}")
.toString();
}
?
更重要的是,鉴于我们只有 3 个属性,它可能没有区别,但是在什么时候你会从 concat 切换到?+StringBuilder

网友回答:
关键是你是在一个地方编写单个串联,还是随着时间的推移累积它。
对于您给出的示例,显式使用 StringBuilder 是没有意义的。(查看第一个案例的编译代码。
但是,如果您正在构建一个字符串,例如在循环中,请使用 StringBuilder。
澄清一下,假设 hugeArray 包含数千个字符串,代码如下:
...
String result = "";
for (String s : hugeArray) {
result = result + s;
}
与以下相比,非常浪费时间和内存:
...
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
sb.append(s);
}
String result = sb.toString();

网友回答:
版本 1 更可取,因为它更短,编译器实际上会将其转换为版本 2 – 没有任何性能差异。
更重要的是,鉴于我们只有 3 个
属性,它可能没有
区别,但是您在
什么时候从 concat 切换到构建器?
在循环中连接时 – 这通常是编译器无法自行替换的时候。StringBuilder

网友回答:
在大多数情况下,您不会看到这两种方法之间的实际差异,但很容易构建如下所示的最坏情况:
public class Main
{
public static void main(String[] args)
{
long now = System.currentTimeMillis();
slow();
System.out.println("slow elapsed " + (System.currentTimeMillis() - now) + " ms");
now = System.currentTimeMillis();
fast();
System.out.println("fast elapsed " + (System.currentTimeMillis() - now) + " ms");
}
private static void fast()
{
StringBuilder s = new StringBuilder();
for(int i=0;i<100000;i++)
s.append("*");
}
private static void slow()
{
String s = "";
for(int i=0;i<100000;i++)
s+="*";
}
}
输出为:
slow elapsed 11741 ms
fast elapsed 7 ms
问题在于,将 += 附加到字符串会重建一个新字符串,因此它的成本与字符串的长度(两者的总和)成线性关系。
所以 – 对于您的问题:
第二种方法会更快,但可读性较差且更难维护。
正如我所说,在您的特定情况下,您可能不会看到区别。
模板简介:该模板名称为【StringBuilder vs Java 中 toString() 中的字符串连接】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。