On Java 1.7+ should we still need to convert "this string" + "should" + "be" + "joined" using StringBuffer.append for best practices?
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);
}
// 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).
© 2022 - 2024 — McMap. All rights reserved.
StringBuilder()
? – Wellborn