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.