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.
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.
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.
StringBuilder will not be used in cases like this: String str = ""; str += <something that isn't a compile-time constant>.StringBuilder with the compiler I'm using (JDK 7). In theory it could use String.concat instead, but I haven't seen any evidence of that happening. Of course, the exact implementation isn't specified, but I can't remember seeing any compiler use String.concat.StringBuilder will be used, but in the concatenation in my first comment, it would produce bytecode equivalent to new StringBuilder().append("foo").append(<something that...>).toString();. Bah, I should have initialized str to a non-empty string in that comment, too.