32. Data Classes

A data class is meant to hold data. The compiler generates toString, equals/hashCode, copy(...), and componentN functions from the properties in the primary constructor.

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

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 30)

    println(a)                 // generated toString
    println(a == b)            // structural equality via equals

    val older = a.copy(age = 31)
    println(older)

    val (name, age) = a        // destructuring via componentN
    println("$name is $age")
}

copy(...) returns a new instance with selected properties changed, and the generated component1/component2 functions enable destructuring declarations.

Running it:

$ kotlin run
User(name=Alice, age=30)
true
User(name=Alice, age=31)
Alice is 30
← Prev Index Next →