Test de la chaîne de l'égalité à l'aide de hashCode()

Est-il une raison pourquoi Java string ne peut pas être testé pour l'égalité à l'aide de sa méthode hashCode? Donc, en gros, au lieu de....

"hello".equals("hello")

Vous pouvez utiliser...

"hello".hashCode() == "hello".hashCode()

Ce serait utile car une fois qu'une chaîne est calculé, il est hashcode puis de les comparer une chaîne serait aussi efficace que la comparaison des int comme la chaîne met en cache le hashcode et il est fort probable que la chaîne est la chaîne de la piscine, de toute façon, si vous avez conçu de cette façon.

  • Votre réponse se trouve dans la documentation sur le equals() et hashcode() méthodes.
  • Et concernant l'efficacité énergétique: les regarder de plus près à la les chaînes que vous comparez. Je serai prêt à parier qu' > 50% diffèrent par leur premier caractère, et > 66% diffèrent dans leurs deux premiers caractères. Si vous avez réellement un très efficace en comparaison avec hashCode(), qui doit marcher à l'ensemble de la chaîne. De Plus, si vous utilisez des chaînes dans le constant pool, equals() vérifie d'abord de l'identité, qui donnera un coup de pied ceux tout de suite.
  • Il est vrai que le pire scénario est que les chaînes correspondent réellement, ce qui pourrait aussi être le scénario le plus courant. Vous avez également répondu à ma chaîne de performances de la question, tous les gains réalisés par une mise en commun des hashcode est fait déjà de l'exécution d'une instance de contrôle. Cheers!
  • Ce que je trouve étrange, c'est que l'actuelle Chaîne de mise en œuvre des caches de la hashCode, mais ne l'utilise pas dans equals(), même si ce serait un moyen rapide d'éliminer l'inégalité des chaînes dans de nombreux cas, un grand gain dans le (certes rares) cas où vous comparez des chaînes avec de longues identiques préfixes.
InformationsquelleAutor | 2009-09-23