Po pierwsze, wynik hashCode zależy w dużej mierze od typu obiektu i jego implementacji. każda klasa, w tym jej podklasy, może definiować własne zachowanie. możesz polegać na nim zgodnie z generalną umową opisaną w javadoc, jak również w innych odpowiedziach. ale wartość nie jest wymagana, aby pozostać taka sama po ponownym uruchomieniu maszyny wirtualnej. zwłaszcza jeśli zależy to od implementacji .hashCode klas stron trzecich.
odwołując się do konkretnej implementacji klasy String, nie powinieneś polegać na wartości zwracanej. jeśli program zostanie wykonany na innej maszynie wirtualnej, może potencjalnie ulec zmianie.
jeśli odnosisz się wyłącznie do Słońca Vm, można argumentować, że Sun nie złamie - nawet źle zaprogramowanego - istniejącego kodu., więc "test" .hashCode() zawsze zwróci dokładnie 3556498 dla dowolnej wersji Sun VM.
jeśli chcesz umyślnie strzelać sobie w stopę, idź dalej i polegaj na tym. ludzie, którzy będą musieli naprawić kod na "Maszynie do 2015 Nintendo Java VM for Hairdryer", będą w nocy wykrzykiwać twoje imię.
(Chociaż będzie inaczej, jeśli uda Ci się znaleźć 1.0 JDK. Zepsuta definicja w dokumentach API faktycznie wyrzuciłaby wyjątki, jeśli zostanie zaimplementowana.) –
Jest również dobrze zdefiniowany dla większości kolekcji – finnw