StringBuilder 与 Java 中 toString() 中的字符串连接

新手上路,请多包涵

鉴于下面的 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

原文由 non sequitor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 425
2 个回答

版本 1 更可取,因为它更短, 而且编译器实际上会将其转换为版本 2—— 没有任何性能差异。

更重要的是,鉴于我们只有 3 个属性,它可能没有什么不同,但你在什么时候从 concat 切换到 builder?

在循环中连接的地方——通常是编译器无法自行替换 StringBuilder 的时候。

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 3.0 许可协议

关键是你是在一个地方写一个连接还是随着时间的推移积累它。

对于您给出的示例,显式使用 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();

原文由 joel.neely 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题