У data class они генерируются по свойствам primary constructor; у обычного — по умолчанию referential (===), пока не переопределите.
Разбор
- Контракт: равные объекты — одинаковый hashCode.
- Mutable var в data class ломает использование в HashSet/Map.
=== — идентичность; == вызывает equals.
- Sealed/data комбинации для value equality.
Итог
Для ключей коллекций нужна стабильная value equality.