为什么Java字符数组总是返回相同的哈希码而不管数组包含什么?

时间:2013-09-28 18:35:25

标签: java hash hashcode

我编写了以下代码,用于验证java中的字符数组始终返回相同的哈希码,而不管数组包含的是什么。

这不是一个有缺陷的实施吗?当数组与数组包含的内容无关时,如何为数组计算哈希码?

import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

class Main{ 

    public static void main(String[] args)throws java.lang.Exception{
        char[] arr = new char[10];
        Random rand = new Random(1);
        for(int i=0; i<10; i++){
            for(int j=0; j<arr.length; j++){
                arr[j] = (char)('a' + rand.nextInt(26));
            }
            printArr(arr);
            System.out.println(" " + arr.hashCode());
        }
    }

    private static void printArr(char[] a){
        for(Character c : a){
            System.out.print(c);
        }
    }
}

输出:

rahjmyuwwk 1169863946
rxnfmqgeeb 1169863946
eoapezsdzs 1169863946
pmqcxjtgdy 1169863946
xkrpvmwmmp 1169863946
mpylwrkvme 1169863946
ozgboqayhu 1169863946
fojcmxghpt 1169863946
eqrgfnzdjs 1169863946
jggwxhtnsk 1169863946

1 个答案:

答案 0 :(得分:2)

因为数组哈希码与Object的哈希码相同。

由于数组始终是同一个对象,因此哈希码将是相同的。