Wartość hashCode ciągu Java jest obliczana jako ( String.hashCode () ):
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Czy są jakieś okoliczności (np. Wersja maszyny JVM, dostawca itp.), W których poniższe wyrażenie zostanie uznane za fałszywe?
boolean expression = "This is a Java string".hashCode() == 586653468
Aktualizacja nr 1: Jeśli twierdzisz, że odpowiedź brzmi „tak, istnieją takie okoliczności” - podaj konkretny przykład, kiedy „To jest ciąg języka Java” .hashCode ()! = 586653468. Spróbuj być tak konkretny / konkretny jak to możliwe.
Aktualizacja # 2: Wszyscy wiemy, że poleganie na szczegółach implementacji funkcji hashCode () jest ogólnie złe. Jednak mówię konkretnie o String.hashCode () - więc proszę, skup się na odpowiedzi na String.hashCode (). Object.hashCode () jest całkowicie nieistotna w kontekście tego pytania.