Sobes.tech
Junior — Middle

Por que em Kotlin se sobrescreve o método hashCode para objetos universais?

sobes.tech IA

Resposta da IA

Em Kotlin, o método hashCode é sobrescrito para objetos universais, a fim de garantir o funcionamento correto com estruturas de dados baseadas em hash, como HashMap ou HashSet. Por padrão, hashCode pode ser baseado no endereço do objeto na memória, o que não é adequado se objetos logicamente iguais devem ter o mesmo hash.

Sobrescrever hashCode juntamente com equals garante que objetos considerados iguais terão o mesmo código hash, o que é importante para uma busca, inserção e remoção corretas nas coleções.

Exemplo de sobrescrita em uma data class (Kotlin gera equals e hashCode automaticamente):

data class User(val id: Int, val name: String)

Se a classe não for uma data class, deve-se sobrescrever manualmente:

override fun equals(other: Any?): Boolean {
    if (this === other) return true
    if (other !is User) return false
    return id == other.id && name == other.name
}

override fun hashCode(): Int {
    return 31 * id + name.hashCode()
}