Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 221
peter Avatar asked Aug 13 '12 21:08

peter


People also ask

Why did you use StringBuilder instead of string?

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.

Is StringBuilder better than concatenation?

It is always better to use StringBuilder. append to concatenate two string values.

Why is StringBuilder better than concatenation Java?

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.

What is the advantage of using StringBuilder?

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.


2 Answers

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.

like image 198
Mark Byers Avatar answered Oct 25 '22 04:10

Mark Byers


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 } } 
like image 42
Falmarri Avatar answered Oct 25 '22 02:10

Falmarri