Java – difference between String concat and the + operator in Java?



java String concatenation

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:

str1 = new StringBuilder().append(str1).append(str2).toString();

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 of str1 and str2, 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 that str1.concat(str2) throws a NPE, but str1 += str2 will simply treat str1 as if it were null without throwing an exception. (That is, it yields "null" concatenated with the value of str2. If str2 were, say, "foo", you would wind up with "nullfoo".)

Update: See this StackOverflow question, which is almost identical.