Java Arrays.hashcode()奇怪的行为

Dud*_*udi 0 java arrays hashcode

我有一个对象有一个字段 - double [] _myField它的hashcode是

public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + Arrays.hashCode(_myField);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将对象用作Map中的键,我会得到以下奇怪的行为:

for (Map.Entry<MyObject, String> entry: _myMap.entrySet())
    {
         if (entry.getValue() != _myMap.get(entry.getKey()))
         {
                 System.out.println("found the problem the value is null");

         }

    }
Run Code Online (Sandbox Code Playgroud)

我能想到上述IF语句为真的唯一原因是我得到了一个不同的密钥哈希码.

事实上,我已经改变了哈希码函数,在所有情况下都返回1.效率不高,但有利于调试,实际上IF语句总是错误的.

Arrays.hashcode()有什么问题?

请注意(在阅读一些注释后):1)至于在IF语句中使用!=,它确实比较了引用,但在上面的情况下它应该是相同的.无论如何奇怪的是右手边返回NULL 2)至于发布Equals功能.当然我已经实现了它.但这无关紧要.在调试中跟踪代码表明只调用了哈希码.原因可能是奇怪的是,返回的哈希码与原始哈希码不同.在这种情况下,Map找不到匹配的条目,因此不需要调用Equals.

cor*_*iKa 5

数组是否在地图中被更改?因为那会改变结果的结果.