On Java 1.7+ should we still need to convert "this string" + "should" + "be" + "joined" using StringBuffer.append for best practices?
Asked Answered
M

2

6

On Java 1.7+ should we still need to convert "this string" + "should" + "be" + "joined" using StringBuffer.append for best practices?

Maxa answered 15/4, 2015 at 5:9 Comment(4)
Since Java 8 you have the possibility to make a list of Strings you want to be joined and use the static method String.join.Arcadia
Do you mean StringBuilder()?Wellborn
Actually, there are two classes StringBuffer and StringBuilder, both do concatenation. About the difference between them read: #355589Yearning
thanks.. this is very informative.Maxa
E
10

1) constant expressions (JLS 15.28) like "this string" + " should" + " be" + " joined" do not need StringBuilder because it is calculated at compile time into one string "this string should be joined"

2) for non-constant expressions compiler will apply StringBuilder automatically. That is, "string" + var is equivalent to new StringBuilder().append("string").append(var).toString();

We only need to use StringBuilder explicitly where a string is constructed dynamically, like here

    StringBuilder s = new StringBuilder();
    for (String e : arr) {
        s.append(e);
    }
Evidently answered 15/4, 2015 at 5:23 Comment(0)
T
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();

Your decision to use raw String concatenation versus StringBuilder is probably going to depend on the readability and maintainability of your code, rather than performance. Under the Oracle JVM, using direct String concatenation, the compiler will actually use a single StringBuilder under the hood. As a result, both examples I gave above would have nearly identical bytecode. If you find yourself doing many series of raw String concatenations, then StringBuilder may offer you a performance improvement. See this article for more information (which was written after Java 7 was released).

Trainman answered 15/4, 2015 at 5:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.