场景:有一个消息发送者和一个消息接收者。消息的内容被转换为 xom.nu 文档并传递给接收者。这里发生了一些有趣的事情。其中一个标签有一个属性(语言),即文本,其值为字符串“en”。
发送者的“en”有一个哈希值,但接收者的哈希显示为零。是什么导致字符串的哈希为零?
发件人:
接收者:
您不应该仅通过其内部来检查变量。
在这种情况下,您的问题是该字段hash
充当缓存。hashCode()
如果曾经在这个实例上调用过它,它只包含一个值。
尝试观看yourVariable.hashCode()
,您会注意到该hash
字段也会发生变化。
这是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 }
您会看到该值仅在您(第一次)调用时计算hashCode
。hash
与私有无关:您只能使用该hashCode
方法正常获取它。
要回答您的明确问题:字符串的哈希值(由返回hashCode
)0
适用于空字符串(但不仅适用于空字符串)。