0

场景:有一个消息发送者和一个消息接收者。消息的内容被转换为 xom.nu 文档并传递给接收者。这里发生了一些有趣的事情。其中一个标签有一个属性(语言),即文本,其值为字符串“en”。

发送者的“en”有一个哈希值,但接收者的哈希显示为零。是什么导致字符串的哈希为零?

发件人:

发件人图片

接收者:

接收器图像

4

2 回答 2

9

您不应该仅通过其内部来检查变量。

在这种情况下,您的问题是该字段hash充当缓存hashCode()如果曾经在这个实例上调用过它,它只包含一个值。

尝试观看yourVariable.hashCode(),您会注意到该hash字段也会发生变化。

于 2013-09-11T15:50:00.007 回答
5

这是hashCode方法的来源:

1493    public int hashCode() {
1494        int h = hash;
1495        if (h == 0) {
1496            int off = offset;
1497            char val[] = value;
1498            int len = count;
1499
1500            for (int i = 0; i < len; i++) {
1501                h = 31*h + val[off++];
1502            }
1503            hash = h;
1504        }
1505        return h;
1506    }

您会看到该值仅在您(第一次)调用时计算hashCodehash 与私有无关:您只能使用该hashCode方法正常获取它。

要回答您的明确问题:字符串的哈希值(由返回hashCode0适用于空字符串(但不仅适用于空字符串)。

于 2013-09-11T15:51:00.740 回答