What does immutable mean?
If a string is immutable, does that mean that.... (let's assume JavaScript)
var str = 'foo';
alert(str.substr(1)); // oo
alert(str); // foo
Does it mean, when calling methods on a string, it will return the modified string, but it won't change the initial string?
If the string was mutable, does that mean the 2nd alert()
would return oo
as well?
Solution 1:
It means that once you instantiate the object, you can't change its properties. In your first alert you aren't changing foo. You're creating a new string. This is why in your second alert it will show "foo" instead of oo.
Does it mean, when calling methods on a string, it will return the modified string, but it won't change the initial string?
Yes. Nothing can change the string once it is created. Now this doesn't mean that you can't assign a new string object to the str
variable. You just can't change the current object that str references.
If the string was mutable, does that mean the 2nd alert() would return oo as well?
Technically, no, because the substring method returns a new string. Making an object mutable, wouldn't change the method. Making it mutable means that technically, you could make it so that substring would change the original string instead of creating a new one.
Solution 2:
On a lower level, immutability means that the memory the string is stored in will not be modified. Once you create a string "foo"
, some memory is allocated to store the value "foo"
. This memory will not be altered. If you modify the string with, say, substr(1)
, a new string is created and a different part of memory is allocated which will store "oo"
. Now you have two strings in memory, "foo"
and "oo"
. Even if you're not going to use "foo"
anymore, it'll stick around until it's garbage collected.
One reason why string operations are comparatively expensive.