Java String中的hashCode实现

时间:2015-10-30 11:57:06

标签: java

好奇,在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在注释中描述的竞争条件有关。在他发表评论之前,这对我来说并不明显。

1 个答案:

答案 0 :(得分:1)

似乎意图将header("Content-type: text/css"); hash句柄显式放在堆栈上