Sobes.tech
Junior — Middle

O método hashCode usa um campo declarado dentro da data class?

sobes.tech IA

Resposta da IA

Em Kotlin, para data class, o compilador gera automaticamente os métodos hashCode(), equals(), toString(), bem como copy() e componentes para destruição. O método hashCode() baseia-se em todas as propriedades declaradas no construtor primário de data class (ou seja, naquelas indicadas após o nome da classe).

Se dentro de data class for declarado um campo adicional fora do construtor primário, ele não participa no cálculo de hashCode() e equals(). Isto ocorre porque esses métodos consideram apenas as propriedades declaradas no construtor, para garantir uma comparação e hashing corretos dos objetos com base nos dados principais.

Exemplo:

data class User(val id: Int, val name: String) {
    var age: Int = 0 // não participa em hashCode e equals
}

fun main() {
    val user1 = User(1, "Alice")
    val user2 = User(1, "Alice")
    user1.age = 25
    user2.age = 30
    println(user1 == user2) // true, pois a idade não é considerada
    println(user1.hashCode() == user2.hashCode()) // true
}