Search code examples
javastringbuilder

Why use StringBuilder explicitly if the compiler converts string concatenation to a StringBuilder automatically?


Possible Duplicate:
StringBuilder vs String concatenation in toString() in Java

I am wondering, since the compiler internally uses a StringBuilder to append Strings when performing String concatenation, then what's the point and why should I bother using StringBuilder if String concatenation already did the job for you? Are there any other specific reasons?


Solution

  • As you mention, you should not use StringBuilder instead of a simple string concatenation expression such as a + " = " + b. The latter is faster to type, easier to read, and the compiler will use a StringBuilder internally anyway so there is no performance advantage by rewriting it.

    However StringBuilder is useful if you are concatenating a large number of strings in a loop. The following code is inefficient. It requires O(n2) time to run and creates many temporary strings.

    String result = "";
    for (int i = 0; i < foo.length; ++i)
    {
        result += bar(foo[i]);  // Bad
    }
    

    Try this instead:

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < foo.length; ++i)
    {
        sb.append(bar(foo[i]));
    }
    String result = sb.toString();
    

    The compiler optimises only simple a + b + c expressions. It cannot optimize the above code automatically.