?
Strings imitieren das Verhalten von Werttypen wie int, haben jedoch keine feste Größe und müssen daher auf dem Heap allokiert werden. Also hat man eine immutable class gemacht und siehe da, man kann sie wie Werttypen benutzen. Man übergibt sie einfach und die aufgerufene Funktion kann meinen String nicht verändern. Werttypen sind Gedanklich auch immutable. Wie kann man denn den Wert 2 verändern? Gar nicht, man kann nur an seine Variable ein anderes int zuweisen.
Immutable String haben auch ganz erhebliche Vorteile beim "kopieren" (kann man sich nämlich komplett sparen) und extrahieren von Substrings (weil man den Buffer weiter referenzieren kann, nur mit anderen Offset und Länge). Nicht zuletzt sind Strings dadurch thread-safe. Jeder Thread kann darauf lesen wie es ihm gerade passt, hunderte, völlig ohne Synchronisation. Das ist Luxus pur, sich darüber keine Gedanken machen zu müssen.