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

  • 本文关键字:string hashcode Java 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; 
}

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

我已经注释掉了所有其他函数,除了获取数据并对其进行哈希处理,但不确定为什么哈希码具有不同的值。我是否错误地使用了哈希代码?有没有其他方法可以做到这一点?

编辑* 当我在主函数中对字符串进行哈希处理时,值始终相同,但我检索的值从未相同。

问题是这一行:

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

你期望 arr.toString() 返回 char[] 中的字符串。其实不然。

From Object.toString():

类 Object 的 toString 方法返回一个字符串,该字符串由 对象是其实例的类的名称,即 at-sign 字符"@",以及哈希的无符号十六进制表示形式 对象的代码。换句话说,此方法返回一个相等的字符串 值为: getClass().getName() + '@' + Integer.toHexString(hashCode())

所以 arr.toString() 返回类似 "[C@3e25a5" 的东西,其值每次都会改变,其 hashCode() 也会随之改变。

你必须使用 Arrays.toString(arr)

而不是 arr.toString()

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

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

最新更新