【问题标题】:Should I use StringBuilder or not? [duplicate]我应该使用 StringBuilder 吗? [复制]
【发布时间】:2015-03-27 05:30:31
【问题描述】:

我的应用程序中有 许多 的地方有以下代码。我正在使用它来准备 SQL 查询。

方法一:

private String sampleMethod(String name) {
    //null check
    StringBuilder sb = new StringBuilder("Welcome ");
    sb.append(name);
    sb.append(", Have a good day!");
    //System.out.println(sb.toString());
    return sb.toString();
}

方法2:

private String sampleMethod(String name) {
    //null check
    //System.out.println("Welcome " + name + ", Have a good day!");
    return "Welcome " + name + ", Have a good day!";
}
  1. 我应该使用哪种方法?
  2. 两者的内存使用量是否相同?

谢谢。

【问题讨论】:

  • AFAIK - 第二种方法将由编译器自动转换为第一种。使用StringBuilder 的用例之一是,如果您在循环中进行String 连接
  • @MadProgrammer,谢谢。明白你的意思。
  • @Prabhaker,感谢您的链接。它解释了很多。 Anyone referring this question in future, should check out above link.

标签: java string concatenation stringbuilder


【解决方案1】:

在内部,这两种方法几乎相同。使用任何使您的代码更易于阅读和维护的东西。仅当您在这方面遇到问题时才担心内存消耗和性能。这将比您想象的要少得多。

【讨论】:

  • 由于我不太了解编译器的工作原理,感谢您指出两种方法在内部是相同的。
【解决方案2】:

在现代版本的 Java 编译器中,成语:

String x = a + b + c;

内部转化为:

String x = new StringBuilder().append(a).append(b).append(c).toString();

所以,除非您使用的是非常旧的编译器,否则两者实际上是相同的。

这并不意味着StringBuilder 不再有用,它仍然可以在forwhile 循环中使用。

【讨论】:

    【解决方案3】:

    Stringbuilder 不会重新创建对象,在这种情况下,内存使用会更好。但是 String 确实重新创建了对象。除此之外,两者的功能是相同的。

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2010-10-10
      • 2011-04-30
      • 2021-09-03
      • 2014-08-25
      • 2014-07-05
      相关资源
      最近更新 更多