This isn’t about hashing, it is about caching. If an object has a property that is expensive to calculate, and you can completely detect all the situations where that property would change, and it is needed often, then you can think about caching the value.
For immutable string objects, you would know when the object and therefore the hash code changes (never), and calculating the hash can be expensive. If your strings use unicode correctly then checking that two strings with different bytes are equal and therefore need the same hash code is expensive.
For mutable string objects you have the added cost that you need to invalidate the cached hash code whenever the value changes.