SORU
24 NİSAN 2009, Cuma


HashCode tutarlılık() Java bir dize

Java Dize hashCode değeri (String.hashCode()) olarak hesaplanır

s[0]*31^(n-1)   s[1]*31^(n-2)   ...   s[n-1]

Orada hiçbir şekilde (ki JVM sürümü, satıcı, vb.) aşağıdaki ifadeyi yanlış değerlendirmesi hangi şartlar altında?

boolean expression = "This is a Java string".hashCode() == 586653468

Güncelleme #1:Eğer cevap olduğunu iddia eğer "Evet, böyle durumlar vardır" - o zaman lütfen zaman somut bir örnek ver "Bu bir Java dize".() hashCode != 586653468. Mümkün olduğunca somut olarak belli olmaya çalışın.

Güncelleme #2:Hepimiz hashCode uygulama ayrıntıları güvenerek() genel olarak kötü. Ancak, özellikle Dize bahsediyorum.() hashCode - lütfen cevap dizeye odaklanmış tutmak.() hashCode. Nesne.() hashCode bu soru bağlamında tamamen alakasız.

CEVAP
24 NİSAN 2009, Cuma


Bu belgelere kadar geri Java 1.2 olarak görüyorum.

Bu doğru olsa dagenel olarakkarma kodu bir uygulama aynı kalan güvenmeyin, şimdi java.lang.String, mevcut sözleşmelerin kırma edin diye değiştirmek için belgelenmiş bir davranıştır.

Mümkün olan her yerde, aynı karşısındaki sürümleri kalmak hash kodları güvenmemelisiniz vb - ama aklımda java.lang.String sadece algoritma çünkü özel bir durumdurvardıralgoritma belirtildi daha önce belirtilmiş... sürümleri ile uyumluluk terk etmeye istekli olduğunuz sürece, elbette.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • SaraBeautyCorner - Nails and Nail Art Designs, DIY, Fashion & Makeup Tutorial

    SaraBeautyCo

    7 EKİM 2012
  • Xbox

    Xbox

    1 Kasım 2005