【发布时间】:2013-07-10 11:36:29
【问题描述】:
我说的是Java。
String str= "abcd";
str.hashCode();
我的问题是哈希码是什么时候计算的? @ 第 1 行还是 @ 第 2 行?
我假设,哈希码是预先计算的。每当更新字符串时,哈希码也会“可能”更新。
或者它的另一种方式,即每次你调用str.hashCode()时,java都会使用here描述的公式计算它。
【问题讨论】:
-
您不能将现有的
String实例更新为String is immutable。您将能够做的是创建一个新实例并将其分配给相同的变量。 -
之前,在阅读文档之前,我的错误印象是 1) 如果两个字符串不相等,java.lang.String.hashCode() 将永远不会为两个字符串返回相同的 hashcode()。 2)我仍然认为在 java Strings hashcode 中是预先计算的。然而,除了暗示它总是计算但不想假设的公式之外,文档没有提到任何其他内容。
-
好吧,正如您从我发布的摘录中看到的那样,至少在 Sun JVM 中它是延迟计算和缓存的。