【发布时间】:2010-12-04 16:25:59
【问题描述】:
鉴于以下 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 时应该会看到明显的差异。
-
参数中100的平均值是多少?
-
@UnKnown 100 是 StringBuilder 的初始大小
-
@nonsequitor 所以最大字符数是 100?
-
@Unknown 不只是初始大小,如果您知道要处理的字符串的大致大小,那么您可以告诉
StringBuilder预先分配多少大小,否则它将在用完时空间,必须通过创建一个新的char[]数组来将大小翻倍,然后复制数据 - 这是昂贵的。你可以通过给出大小作弊,然后就不需要创建这个数组了——所以如果你认为你的字符串大约 100 个字符长,那么你可以将 StringBuilder 设置为那个大小,它永远不必在内部扩展。跨度>
标签: java performance string concatenation stringbuilder