好奇,在String的hashCode实现中,在hashCode实现中创建额外引用的原因是什么(v 1.8.0_65):
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;
}
考虑到value
是最终的并且仅在构造函数中创建(即线程安全)为什么我们在这里需要变量val []引用?
即。这会工作:
public int hashCode() {
if (hash == 0 && value.length > 0) {
int h = 0;
for (int i = 0; i < value.length; i++) {
h = 31 * h + value[i];
}
hash = h;
}
return hash;
}
除了将值从堆复制到堆栈以加快速度之外,它还与@zapl在注释中描述的竞争条件有关。在他发表评论之前,这对我来说并不明显。
答案 0 :(得分:1)
似乎意图将header("Content-type: text/css");
和hash
句柄显式放在堆栈上