相同的字符串,不同的哈希码

时间:2013-03-25 11:55:20

标签: java scala hashcode

我正在编写一个简单的查找,总是以某种方式失败。进一步调查,我发现了一些我无法解释的事情:似乎虽然我的字符串是相同的,但它们并没有得到相同的哈希码。

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中的错误吗?是否涉及一些神奇的Scala干扰?

环境:

  • Scala 2.10
  • 64位Oracle Java 1.7.0_17和Oracle Java 1.6.0_43
  • IntelliJ IDEA(最新社区版)

1 个答案:

答案 0 :(得分:7)

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

!=

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

jSeduite != jseduite