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.