0Pricing
Kotlin Academy · Lektion

copy und equals

Generierte Funktionen

copy und equals ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Generierte Funktionen

Neben toString generiert eine Datenklasse equals, hashCode und copy.

Diese drei Funktionen machen Datenklassen besonders praktisch zum Vergleichen und Kopieren.

Strukturelle Gleichheit

Das generierte equals vergleicht Objekte anhand ihrer Eigenschaftswerte und nicht anhand ihrer Identität.

Zwei Instanzen einer Datenklasse mit denselben Werten sind mit == gleich.

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

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

Unterschiedliche Werte sind nicht gleich

Wenn Sie eine beliebige Eigenschaft ändern, sind die Objekte nicht mehr gleich.

Die Gleichheit wird aus jeder Eigenschaft im primären Konstruktor berechnet.

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

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

Gleichheit und Identität

Verwenden Sie == für Wertgleichheit (strukturelle Gleichheit) und === für Referenzgleichheit (Identität).

Zwei gleiche Datenobjekte können im Speicher unterschiedliche Instanzen sein.

data class User(val name: String)

fun main() {
    val a = User("Alice")
    val b = User("Alice")
    println(a == b)  // values match
    println(a === b) // different instances
}

Konsistenter hashCode

hashCode wird passend zu equals generiert: Gleiche Objekte erzeugen denselben Hash.

Dadurch funktionieren Datenklassen in Mengen und als Schlüssel von Maps korrekt.

data class Point(val x: Int, val y: Int)

fun main() {
    val a = Point(1, 2)
    val b = Point(1, 2)
    println(a.hashCode() == b.hashCode())
}

Die copy-Funktion

copy erstellt ein neues Objekt, das mit dem ursprünglichen identisch ist.

Bei unveränderlichen val-Eigenschaften erstellen Sie mit Kopieren eine geänderte Version.

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

fun main() {
    val a = User("Alice", 30)
    val b = a.copy()
    println(b)
    println(a == b)
}

Kopieren mit Änderungen

Übergeben Sie benannte Argumente an copy, um bestimmte Eigenschaften zu ändern und den Rest beizubehalten.

Dies ist das Standardmuster zum Aktualisieren unveränderlicher Daten.

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

fun main() {
    val a = User("Alice", 30)
    val older = a.copy(age = 31)
    println(a)
    println(older)
}

copy lässt das Original unverändert

copy verändert das Quellobjekt niemals. Das Original behält seine Werte.

Diese Unveränderlichkeit macht Zustandsänderungen vorhersehbar und sicher.

data class Account(val owner: String, val balance: Int)

fun main() {
    val original = Account("Sam", 100)
    val updated = original.copy(balance = 150)
    println(original.balance)
    println(updated.balance)
}

Kopien verketten

Da copy ein neues Objekt zurückgibt, können Sie mehrere Aktualisierungen nacheinander anwenden.

Jeder Schritt erzeugt einen neuen, unabhängigen Wert.

data class Config(val volume: Int, val muted: Boolean)

fun main() {
    val base = Config(50, false)
    val result = base.copy(volume = 70).copy(muted = true)
    println(result)
}

Nur Konstruktor-Eigenschaften zählen

Genau wie bei der Gleichheit verarbeitet copy nur Eigenschaften des primären Konstruktors.

Eigenschaften im Rumpf werden in der Kopie auf ihre Standardwerte zurückgesetzt. Halten Sie wichtigen Zustand daher im Konstruktor.

data class User(val name: String) {
    var note: String = "none"
}

fun main() {
    val a = User("Alice")
    a.note = "VIP"
    val b = a.copy()
    println(b.note) // back to default
}

Alles zusammenführen

Die generierten Funktionen verleihen Datenklassen ihre Stärke:

  • equals und == vergleichen anhand des Werts
  • hashCode bleibt mit equals konsistent
  • copy erstellt Kopien mit optionalen Änderungen
data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy(name = "Alicia")
    println(a == b)
    println(b)
}

Kurzer Test

Überprüfen Sie Ihr Verständnis von copy und equals.

Zusammenfassung

Sie haben die generierten Funktionen von Datenklassen kennengelernt:

  • equals vergleicht anhand des Werts, == im Gegensatz zu ===
  • hashCode bleibt für Collections konsistent
  • copy erstellt Kopien mit ausgewählten Änderungen

Als Nächstes lernen Sie, wie Destrukturierung Objekte in Variablen aufteilt.

Häufig gestellte Fragen

Ist die Lektion „copy und equals“ kostenlos?

Ja — der vollständige Text von „copy und equals“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „copy und equals“?

Generierte Funktionen Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „copy und equals“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Data Classes deklarieren
  2. copy und equals
  3. Destrukturierende Deklarationen
  4. Data Classes in Collections
← Zurück zu Kotlin Academy