为什么String在串联中优于StringBuilder?

时间:2017-10-04 21:25:10

标签: string intellij-idea stringbuilder

我的方法需要返回一个从字符串连接的字符串。

StringBuilder sb = new StringBuilder();
sb.append("count: ").append(this.count()).append( "\n");

return sb.toString();

在IntelliJ中,代码检查建议我用下面的字符串替换这个StringBuilder:

String sb = "count: " + this.count() + "\n";
return sb

我的印象是StringBuilder应该与append方法一起使用,用加号替换字符串连接。这段代码检查建议在IntelliJ中是否有意义?

1 个答案:

答案 0 :(得分:2)

你的假设是正确的,大多数IntelliJ 检查鼓励你做更好的事情。方式。

然而,情况并非总是如此。特别是在一些检查工作的情况下,两种方式都可以。 - >你必须自己判断什么是更好的"。

在这种情况下,如果以普通的连接字符串开头:

    return "count: " + count + "\n";

有一些检查可用 - 将光标放在"count: "上并点击alt-enter:

  1. 替换' +'使用String.format()
  2. 替换' +'使用StringBuilder.append()
  3. 替换' +'与java.text.MessageFormat.format()
  4. 如果你选择选项(2),你会得到:

        return new StringBuilder().append("count: ").append(count).append("\n").toString();
    

    现在,您可以再次使用alt-enter选择"将StringBuilder替换为String"扭转变化。

    在这种情况下,您发现了一种双向的检查/重构:它可以双向工作。其他重构(例如" Encapsulate")只能以一种方式工作。

    至于什么是"更好" - 你必须权衡StringBuilder与可读性和简单性的表现,并自己做出判断 - IntelliJ只是提供方便的检查来帮助你;)