Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串对象的哈希为0_Java_Xml_String_Hash - Fatal编程技术网

Java 字符串对象的哈希为0

Java 字符串对象的哈希为0,java,xml,string,hash,Java,Xml,String,Hash,场景:有一个消息发送者和一个消息接收者。消息的内容将转换为xom.nu文档并传递给接收方。这里发生了一些有趣的事情。 其中一个标记(即文本)有一种属性语言,其值为字符串en 发送方的en有一个散列值,但接收方的散列值显示为零。是什么导致字符串的哈希为零 发件人: 接收人: 您不应该仅通过变量的内部结构来检查变量 在这种情况下,您的问题是字段哈希充当缓存。只有在此实例上调用过hashCode时,它才包含一个值 尝试查看variable.hashCode,您会注意到哈希字段也会发生变化。以下是has

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

发送方的en有一个散列值,但接收方的散列值显示为零。是什么导致字符串的哈希为零

发件人:

接收人:


您不应该仅通过变量的内部结构来检查变量

在这种情况下,您的问题是字段哈希充当缓存。只有在此实例上调用过hashCode时,它才包含一个值

尝试查看variable.hashCode,您会注意到哈希字段也会发生变化。

以下是hashCode方法的源代码:

您可以看到,只有在第一次调用hashCode时才计算该值。这并不重要,因为hash是私有的:您只能使用hashCode方法正常地获取它


回答您的明确问题:对于空字符串,hashCode返回的字符串哈希值为0,但。

这意味着尚未计算哈希值??我认为Suresh是对的,请尝试调用hashCode。此外,不同平台上的哈希代码也不能保证相同。@Marcelo哈希算法在文档中有定义。所以它是独立于平台的。对于空字符串,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    }