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:
equalsund==vergleichen anhand des WertshashCodebleibt mit equals konsistentcopyerstellt 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.