Strings are immutable because they're objects, while references are immutable because they're values, and that difference is meaningful. Being an object, a string is a collection of behaviors METHODS and fields DATA. Once you create a string, you need to do some work to make it do something else. In this case, you'd create a new string by allocating a new object, then copying the object's data fields into the new object. In this context, the new object would be mutable, since you can change it. But holding a reference to the new object is not, since you can't change the object.