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?
StringBuilder is used to represent a mutable string of characters. Mutable means the string which can be changed. So String objects are immutable but StringBuilder is the mutable string type. It will not create a new modified instance of the current string object but do the modifications in the existing string object.
It is always better to use StringBuilder. append to concatenate two string values.
Reason being : The String concatenate will create a new string object each time (As String is immutable object) , so it will create 3 objects. With String builder only one object will created[StringBuilder is mutable] and the further string gets appended to it.
StringBuilder allows you to add characters to an object and when you need to use the string representation, you call ToString() on it. Show activity on this post. StringBuilder works like string. format() and is more efficient than manually appending strings or + ing strings.
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.
Where are you assuming that string concatination uses stringbuilder internally? Maybe a simple concat gets optimized away, but this will definitely not:
String s = ""; for (int i = 0; i < 1000; i++){ for (int j = 0; j < 1000; j++){ s+= "" + i + j } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With