簡體   English   中英

Java string.hashcode()給出了不同的值

[英]Java string.hashcode() giving differing values

我已經堅持這個問題幾個小時了。 我已經注釋掉了所有代碼,認為它與數組越界有關,但這仍然在發生。 我正在嘗試使用掃描程序從文件讀取輸入,存儲數據並在以后使用哈希碼獲取數據。 但是散列值不斷變化。

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 []中的字符串。 它沒有。

來自Object.toString()

類Object的toString方法返回一個字符串,該字符串由對象為實例的類的名稱,符號字符“@”以及對象的哈希碼的無符號十六進制表示組成。 換句話說,此方法返回一個等於以下值的字符串: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(炭[])

是的,每次都打印出同樣的東西。 您的方法是打印key的hashCode,它不是函數參數。 所以大概你已經在代碼中的某個地方定義了你沒有向我們展示過......為什么它的hashCode會改變?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM