Duplicate
I'm curious what is the difference between the two.
The way I understand the string pool is this:
This creates 3 string objects in the string pool, for 2 of those all references are lost.
String mystr = "str";
mystr += "end";
Doesn't this also create 3 objects in the string pool?
String mystr = "str";
mystr = mystr.concat("end")
I know StringBuilder and StringBuffer are much more efficient in terms of memory usage when there's lots of concatination to be done. I'm just curious if there's any difference between the + operator and concat in terms of memory usage.
Best Solution
There's no difference in this particular case; however, they're not the same in general.
str1 += str2
is equivalent to doing the following:To prove this to yourself, just make a simple method that takes two strings and
+=
's the first string to the second, then examine the disassembled bytecode.By contrast,
str1.concat(str2)
simply makes a new string that's the concatenation ofstr1
andstr2
, which is less expensive for a small number of concatenated strings (but will lose to the first approach with a larger number).Additionally, if
str1
is null, notice thatstr1.concat(str2)
throws a NPE, butstr1 += str2
will simply treatstr1
as if it were null without throwing an exception. (That is, it yields "null" concatenated with the value ofstr2
. Ifstr2
were, say, "foo", you would wind up with "nullfoo".)Update: See this StackOverflow question, which is almost identical.