文字列が不変である多くの理由の中で、理由の1つは次のように引用されています。
文字列の不変性により、ハッシュコード値をキャッシュできます。
私はこれを本当に理解していませんでした。ハッシュコード値をキャッシュするとはどういう意味ですか?これらの値はどこにキャッシュされますか?文字列が変更可能であったとしても、このキャッシュされたハッシュコード値は必要に応じていつでも更新できます。それで、大したことは何ですか?
ハッシュコード値をキャッシュするとはどういう意味ですか?これらの値はどこにキャッシュされますか?
ハッシュコードが計算されると、の変数に格納されます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;
}
...
}
文字列が変更可能であったとしても、このキャッシュされたハッシュコード値は必要に応じていつでも更新できます
本当。ただし、すべての変更関数で再計算/リセットする必要があります。これは可能ですが、良いデザインではありません。
全体として、次のような理由があればおそらくもっと良かったでしょう。
文字列の不変性により、ハッシュコード値のキャッシュが容易になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加