String new writeStream. When you start with an empty string in Helmut's example you get four grows. Then there are three more grows until the string size reaches 16. The dumb 'abc', 'def', 'xyz' concatenation would cost you 2 allocations and 15 characters copied. The bottom line is, one should understand the mechanisms involved and have an idea of their costs.
String concatenation is initally cheap, but the costs grow quickly.
Stream output is fairly expensive up-front, but the cost grows slowly with more output. Depending on how much data you want to output, one may be better than the other. There is a tremendous difference once get above 3 or 4 concatenates. At 2, the overhead of building the Stream makes stream a bit slower, but its not bad to use streams even at 2. Here is why.