2013-03-25 109 views
0

我正在編碼一個簡單的查找,總是失敗。進一步調查,我發現了一些我無法解釋的東西:似乎雖然我的字符串是相同的,但它們不會得到相同的哈希碼。相同的字符串,不同的哈希碼

fr.unice.i3s.modalis.jSeduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A536564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash code: 1515256474 
fr.unice.i3s.modalis.jseduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A736564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash Code: 2099127532 

用Java 6重複實驗,我遇到了類似的問題。需要注意的是無論哪種方式,事情並非常數:

fr.unice.i3s.modalis.jSeduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A536564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash code: 1515256474 
fr.unice.i3s.modalis.jseduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A736564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash Code: - 1772912571 

我的代碼依賴於這場比賽,我不想跑.equals(),因爲它很可能是太慢了。

據我所知,散列碼對於相同的字符串應該是相同的。這是JVM中的錯誤嗎?是否有一些神奇的斯卡拉干涉?

環境:

  • 斯卡拉2.10
  • 64位Oracle的Java 1.7.0_17和Oracle的Java 1.6.0_43
  • 的IntelliJ IDEA(最新的社區版)
+3

你也可以說產生了不同的哈希碼的代碼? – Axel 2013-03-25 11:58:37

+0

你在使用什麼哈希庫?線程安全嗎? – iamsleepy 2013-03-25 11:59:40

+0

你能告訴我們實際的字符串,所以我們可以檢查他們的hashcode嗎? – 2013-03-25 12:08:58

回答

7

fr.unice.i3s.modalis.jSeduite.technical.restaurant.CourseFinder

!=

fr.unice.i3s.modalis.jseduite.technical.restaurant.CourseFinder

jSeduite != jseduite

+1

非常尖銳的眼睛! – malaverdiere 2013-03-25 12:34:49

相關問題