java - java中的String hashCode是预先计算的吗?

标签 java hashcode

我说的是 Java。

String str= "abcd";
str.hashCode(); 

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

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

或者它的另一种方式,即每次调用 str.hashCode() java 都会使用描述的公式计算它 here .

Consistency of hashCode() on a 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;
    }

关于java - java中的String hashCode是预先计算的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17569651/

相关文章:

java - 如何对 HashMap<Integer, ArrayList<String>> 中的数组列表进行排序

java - 如何从三个 long 生成哈希码

java - 将 Object 与无序整数对作为变量进行比较时需要适当的 hashCode

scala - 类和案例类中的方法 hashCode

c# - StringBuilder 的 GetHashCode 生成不同的代码

java - Flink + Kafka + JSON - Java 示例

java - 如何在 findElement(By.xpath ("//span[contains(text(),' string')]")) 中使用表达式

lucene - Java突然杀掉

java - 在 eclipse-Java 中重写 hashCode()

java - 有没有办法可以在 Controller 类而不是构造函数中创建 JavaFX GUI?