Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When is StringBuffer/StringBuilder not implicitly used by the compiler?

I've heard that the compiler (or was it the JVM?) will automatically use a StringBuilder for some string concatenation. When is the right time to explicitly declare one? I don't need a StringBuffer for being thread-safe.

Thanks.

like image 579
Jon Onstott Avatar asked Nov 23 '10 23:11

Jon Onstott


1 Answers

The compiler will use it automatically for any string concatenation using "+".

You'd usually use it explicitly if you wanted to concatenate in a loop. For example:

StringBuilder builder = new StringBuilder();
for (String name : names)
{
    builder.append(name);
    builder.append(", ");
}
if (builder.length() > 0)
{
    builder.setLength(builder.length() - 2);
}
System.out.println("Names: " + builder);

Another situation would be where you wanted to build up a string over multiple methods, or possibly conditionalise some bits of the building. Basically, if you're not building the string in a single statement (where the compiler can help you) you should at least consider using StringBuilder.

like image 174
Jon Skeet Avatar answered Nov 15 '22 18:11

Jon Skeet