【发布时间】:2017-04-27 09:18:35
【问题描述】:
查看 Java 的 String 类,我们可以看到哈希码在第一次评估后被缓存。
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
其中hash 是一个实例变量。我有一个问题,为什么我们需要那个 h 额外变量?
【问题讨论】:
-
这样写是为了保证
String类是线程安全的。你可以阅读更多关于这个概念here -
那个维基百科链接没有完全解释这里发生了什么或为什么。