Java string.hashcode()给出不同的值

时间:2012-04-30 19:34:59

标签: java

我已经坚持这个问题几个小时了。我已经注释掉了所有代码,认为它与数组越界有关,但这仍然在发生。我正在尝试使用扫描程序从文件读取输入,存储数据并在以后使用哈希码获取数据。但是散列值不断变化。

public static void main(String[] args)
{
    //only prior code is to access data
    char arr[] = new char[25];
    arr = readString.toCharArray();
    int y;
    y = hash(arr);
}

public static int hash(char[] arr)
{
    int get = arr.toString().hashCode();
    System.out.println(y);
    return get; 
}

对于文件,即使每行都有相同的东西,仍然存在这个问题 恩。
你好
你好
你好

我已经注释掉除了获取数据和哈希之外的所有其他函数,但不确定为什么哈希码具有不同的值。我是否正确使用哈希码?还有另一种方法吗?

编辑*当我散列字符串时,在主函数内部,值总是相同的,但我检索的值从未相同。

3 个答案:

答案 0 :(得分:7)

问题在于这一行:

   int get = arr.toString().hashCode();

你期望arr.toString()返回char []中的字符串。它没有。

来自Object.toString()

  

Object类的toString方法返回一个由。组成的字符串   对象是实例的类的名称,at-sign   字符“@”,以及散列的无符号十六进制表示   对象的代码。换句话说,此方法返回一个相等的字符串   价值:      getClass()。getName()+'@'+ Integer.toHexString(hashCode())

所以arr.toString()返回类似“[C @ 3e25a5”的东西,其值每次都会改变,并且其hashCode()因此也会改变。

答案 1 :(得分:1)

您必须使用Arrays.toString(arr)而不是arr.toString()

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#toString(char[])

答案 2 :(得分:0)

是的,每次都打印出同样的东西。您的方法是打印key的hashCode,它不是函数参数。所以大概你已经在代码中的某个地方定义了这个你没有向我们展示过......为什么它的hashCode会改变?