【问题标题】:Using String Buffer For String Appends in Java [duplicate]在Java中为字符串追加使用字符串缓冲区[重复]
【发布时间】:2015-12-29 06:20:54
【问题描述】:

我想知道 StringBuffer 的这种使用是否与我之前的代码一样,因为 SonarQube 要求我不要使用 += 来附加字符串。

我之前的代码:

String sign = "";
if (value < 0) {
    sign.append("-");
}

我使用 StringBuffer 的新代码:

StringBuffer sign = new StringBuffer();
sign.append("");
if (value < 0) {
    sign.append("-");
}

这样更好吗?

感谢您的建议。

【问题讨论】:

  • 第三路:StringBuilder.
  • 我应该使用StringBuilder 而不是StringBuffer 吗? Sonar 顺便推荐第二个。
  • 等等,什么? Sonar 从什么时候开始推荐使用 StringBuffer 而不是 StringBuilder?
  • 宁可使用StringBuilder,这为您提供了更多功能,它们只是String,并且由于StringBuffer 被设计为线程安全的,它的性能将比StringBuilder 差很多(不是线程安全的) )
  • 嗯,一个产生编译时错误,另一个有效。 (String 类中没有 append 方法)。它也不会那样工作,因为字符串是不可变的(例如,如果您使用concat,则会返回一个新字符串)。

标签: java string append sonarqube stringbuffer


【解决方案1】:

是的,这是更好的方法,但StringBufferStringBuilder 慢,但同步。
如果您使用的这段代码不在多线程应用程序中,我建议您使用StringBuilder

【讨论】:

    【解决方案2】:

    除非您在循环中使用该代码,否则您的第一种方式没有任何问题(字符串连接)。一次尝试,您就可以使用它。

    正如有人评论我假设写sign.append("-");,你的意思是sign +="-"

    如果您在循环中使用,我建议使用StringBuilder 而不是StringBuffer,因为StringBuffer 的另一个开销是同步的。除非您需要线程安全,否则最好将其更改为StringBuilder

    我不确定为什么 SonarQube 建议您使用 StringBuffer

    【讨论】:

      【解决方案3】:

      StringBuffer 是比String 连接更好的方法。

      因为它会提供更好的内存利用率。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-10
        • 1970-01-01
        • 2012-04-27
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        相关资源
        最近更新 更多