Summary

In this chapter, we delved into the workings of strings, looking at the difference between the immutable String and its mutable cousin, StringBuilder. We saw how to convert other data types to and from strings, and how to control that formatting, especially when we consider cultures and languages other than our own.

We saw the various ways in which we can compose strings, and the performance trade-offs of each technique. Finally, we looked at how strings are actually represented in memory, and how we may need to convert between different encodings for different applications, platforms, and configurations.