是否预先计算了java中的String hashCode?

Ari*_*yed 4 java hashcode

在我说Java的时候.

String str= "abcd";
str.hashCode(); 
Run Code Online (Sandbox Code Playgroud)

我的问题是什么时候计算Hashcode?@第1行或@第2行?

我假设,哈希码是预先计算的.每当更新字符串时,哈希码也可能"更新".

或者它的另一种方式,即每当你调用str.hashCode()java时,使用这里描述的公式计算它.

Java字符串上hashCode()的一致性

Kay*_*man 9

字符串无法更新,因为它们是不可变的,并且在计算一次后缓存该值:

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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 这是合理的.但是因为String是一个非常受欢迎的选择作为HashMap的关键,如果没有缓存它将是一个重大的疏忽... (5认同)

Jan*_*aus 1

您无法“更新”字符串。字符串是不可变的。当您“更改”字符串实例时,您实际上获得了一个新的字符串实例。