3

在字符串不可变的众多原因中,其中一个原因被引用为

字符串不变性允许缓存哈希码值。

我真的不明白这一点。缓存哈希码值是什么意思?这些值缓存在哪里?即使字符串是可变的,这个缓存的哈希码值也可以根据需要随时更新;那么有什么大不了的呢?

4

1 回答 1

5

缓存哈希码值是什么意思?这些值缓存在哪里?

计算出哈希码后,将其存储在 中的一个变量中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;
    }

    ...
}

即使字符串是可变的,这个缓存的哈希码值也可以随时根据需要更新

真的。但它必须在每个修改函数中重新计算/重置。虽然这是可能的,但它不是好的设计。

总而言之,如果是以下原因,可能会更好:

字符串不变性使得缓存哈希码值变得更容易。

于 2013-10-13T19:45:18.493 回答