Ответ
Да, могут. В Java/Котлине hashCode() возвращает int, а количество возможных хэш-кодов ограничено (2^32), тогда как количество объектов потенциально бесконечно. Это называется коллизией хэш-кодов.
Пример:
val str1 = "Aa"
val str2 = "BB"
println(str1.hashCode()) // 2112
println(str2.hashCode()) // 2112
Важно: при переопределении hashCode() нужно соблюдать контракт:
- Если
a.equals(b)== true, тоa.hashCode() == b.hashCode() - Обратное не обязательно - разные объекты могут иметь одинаковый хэш