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