Nick Rolando Nick Rolando - 11 months ago 68
Java Question

Best practices/performance: mixing StringBuilder.append with String.concat

I'm trying to understand what the best practice is and why for concatenating string literals and variables for different cases. For instance, if I have code like this

StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")

Is this the way to do it? From this post, I noticed that the
operator on Strings creates a new instance of StringBuilder, concatenates the operands, and returns a String conversion, which seems like a lot more work than just calling
; so if that's true, then that is out of the question. But what about
? Is it proper to use
for every concatenation? Or just for variables, and literals are okay to append with

StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")

What are the general rules for best practices and performance for going about these situations? Is my assumption correct on
and it should really just not be used?


+ operator

String s = s1 + s2

Behind the scenes this is translated to:

String s = new StringBuilder(s1).append(s2).toString();

Imagine how much extra work it adds if you have s1 + s2 here:

stringBuilder.append(s1 + s2)

instead of:


Multiple strings with +

Worth to note that:

String s = s1 + s2 + s3 + ... +sN

is translated to:

String s = new StringBuilder(s1).append(s2).append(s3)...apend(sN).toString();


String s = s1.concat(s2);

String creates char[] array that can fit both s1 and s2. Copies s1 and s2 contents to this new array. Actually requires less work then + operator.


Maintains an internal char[] array that grows when needed. No extra char[] is created if the internal one is sufficiently big.


is also performing poorly because s1.concat(s2) creates an extra char[] array and copies s1 and s2 to it just to copy that new array contents to internal StringBuilder char[].

That being said you should use append() all the time and append raw strings (your first code snippet is correct).