在Java 1.7+上我们是否还需要使用StringBuffer.append转换“this string”+“should”+“be”+“join”以获得最佳实践?

时间:2015-04-15 05:09:06

标签: java stringbuffer

在Java 1.7+上我们是否还需要使用StringBuffer.append转换“this string”+“should”+“be”+“join”以获得最佳实践?

2 个答案:

答案 0 :(得分:10)

1)像"this string" + " should" + " be" + " joined"这样的常量表达式(JLS 15.28)不需要StringBuilder,因为它在编译时计算成一个字符串"this string should be joined"

2)对于非常量表达式,编译器将自动应用StringBuilder。也就是说,"string" + var相当于new StringBuilder().append("string").append(var).toString();

我们只需要在动态构造字符串时显式使用StringBuilder,就像这里

一样
    StringBuilder s = new StringBuilder();
    for (String e : arr) {
        s.append(e);
    }

答案 1 :(得分:1)

// using String concatentation
String str = "this string" + "should" + "be" + "joined";

// using StringBuilder
StringBuilder builder = new StringBuilder();
builder.append("this string");
builder.append("should");
builder.append("be");
builder.append("joined");
String str = builder.toString();

您使用原始String级联与StringBuilder的决定可能取决于代码的可读性和可维护性,而不是性能。在Oracle JVM下,使用直接String连接,编译器实际上将使用单个StringBuilder。结果,我上面给出的两个例子都有几乎相同的字节码。如果您发现自己进行了许多系列的原始String连接,那么StringBuilder可能会为您提供性能提升。有关详细信息,请参阅this article(在发布Java 7之后编写)。