Здравствуйте, c-smile, Вы писали:
GIV>>Принцип наименьшего удивления советует сделать так, как в Java и .NET
CS>То как сделано в Java например вызывает как раз наибольшее количество вопросов.
CS>Там вообще назначение этого hashValue() не ясно.
Черным по белому написано же
This method is supported for the benefit of hash tables such as those provided by HashMap.
CS>Вот правила Java:
CS>CS>"123".hashValue() == "123".hashValue();
верно
CS>"123".hashValue() != "345".hashValue();
неверно, может быть и равно
CS>{a:"123"}.hashValue() != {a:"123"}.hashValue();
CS>{a:"123"}.hashValue() != {a:"345"}.hashValue();
Если считать, что этот hashValue == java.lang.Object.hashCode то да, верно
CS>
CS>Я теряюсь в понимании того что такое hash в их понимании. Это identity или content метрика или что-то другое вообще?
Ни то не другое. Точнее для каких-то классов 100% content (string), для каких-то 100% identity (Object) для каких-то нечто промежуточное.