在字符串不可变的众多原因中,其中一个原因被引用为
字符串不变性允许缓存哈希码值。
我真的不明白这一点。缓存哈希码值是什么意思?这些值缓存在哪里?即使字符串是可变的,这个缓存的哈希码值也可以根据需要随时更新;那么有什么大不了的呢?
缓存哈希码值是什么意思?这些值缓存在哪里?
计算出哈希码后,将其存储在 中的一个变量中String
。
查看来源String
可以更清楚地说明这一点:
public final class String implements ... {
...
/** Cache the hash code for the string */
private int hash; // Default to 0
...
public int hashCode() {
int h = hash;
if (h == 0 && ...) {
...
hash = h;
}
return h;
}
...
}
即使字符串是可变的,这个缓存的哈希码值也可以随时根据需要更新
真的。但它必须在每个修改函数中重新计算/重置。虽然这是可能的,但它不是好的设计。
总而言之,如果是以下原因,可能会更好:
字符串不变性使得缓存哈希码值变得更容易。