In terms of readability, I think you are very wrong. + wins over .concat(). If you are using +=, you might want to think about StringBuilder.append keeping the same StringBuilder for the loop.
In terms of performance concat is better than +. so long as you only use one or perhaps two.
In the case of concat, you will end up creating a String object with a correctly sized char[]. It's about as optimal as you can get.
For + javac generates code that constructs a StringBuilder to do the appending and then converts to a String. From 1.5 you create:
- A
StringBuilder (waste)
- Initial
char[] for StringBuilder (waste)
- If resulting sequence is too long, a second bigger
char[] (waste)
- The resulting
String.
- The
String's char[].
However, you rarely see concat used because it is more difficult to read. The performance is almost certainly going to be a drop in the ocean compared to what else is going on (hint: try the back of an envelope before optimising).