As far as i know + operator in Java String is overloaded and while we are using + operator it automatically chooses StringBuffer or StringBuilder to concatenate strings with better performance. Only exception of this is while we are using + operator inside a loop. In this case Java doesn't use benefits of StringBuffer and StringBuilder. Is that true? I will concatenate 40 Strings (around 4500 chars) and I will repeat it so often so I wanted be sure about it.
- 91
- 2
- 9
-
Why just don't use StringBuilder and append strings to it ? – Nikolay Tomitov Feb 25 '16 at 10:23
-
1duplicate of http://stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java – Edi Feb 25 '16 at 10:27
-
Possible duplicate of [StringBuilder vs String concatenation in toString() in Java](http://stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java) – Joshua Goldberg Mar 08 '17 at 19:08
2 Answers
No, Java will always (almost always, see comment bellow) convert concatenation into the StringBuilder. However the problem with loop is that it will create new instance of StringBuilder per each walkthrough.
So if you do String someString = i + "something"; inside the loop which goes from 0 to 1000 it will create for you new instance of StringBuilder 1000 times. Which could be a performance problem then. So just declare StringBuilder before the loop and then use it inside it.
- 26,874
- 17
- 90
- 115
-
Actually I will create a JSON and i will not use a loop for that so i am trying to figure out if its good idea to use StringBuilder or its not necessary. – Altan Gokcek Feb 25 '16 at 10:26
-
-
+1, although the first sentence is incorrect: `No, Java will always convert concatenation into the StringBuilder`. In some cases the compiler leaves it as a String. ([source 1](http://stackoverflow.com/a/1532499/1682559) - comment in this answer; [source 2](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18.1) - actual specs (quote: 'To increase the performance of repeated string concatenation, a Java compiler **may** use the StringBuffer class or a similar technique to reduce the number of intermediate String objects that are created by evaluation of an expression.'). – Kevin Cruijssen Feb 25 '16 at 10:41
String is immutable while StringBuilder is mutable it means when you create a String you can never change it
String is thread safe while StringBuilder not
String stores in Constant String Pool while StringBuilder in Heap
When you loop
oldString = oldString + somechars,
it means you create a new String and put oldString`s value into it first ,then append somechars ,then redirect the oldString variable to the result
- 325
- 7
- 18