Not quite. + does use a StringBuffer or StringBuilder, but concat() creates a new char with the contents of the current String and the String to append, and returns a new String based on that array:
I can actually see one more improvement on that which Sun have overlooked:
Now, if you concatenate only 2 strings the difference in performance will be minimal, but otherwise using + will result in fewer objects created, if there is a difference. However, its internal capacity can increase exponentially (it tries to use (value.length + 1) * 2 if the contents would not fit), so in the end it could be worse.
Still, using + is the usual way to go. Don't start using concat unless you find you really need to improve on performance.