Unterschied zwischen den Operatoren "==" und "===" in Kotlin

Unterschied zwischen den Operatoren "==" und "===" in Kotlin

1. Überblick

In diesem Artikel werden wir über diedifference between “==” and “===” operators in Kotlin sprechen.

In Kotlin gibt es genau wie in Java zwei verschiedene Konzepte der Gleichheit:Referential equality undStructural equality.

2. Referenzielle Gleichheit

Für die referenzielle Gleichheit verwenden wir das===-Symbol, mit dem wir die Referenz eines Objekts auswerten können (wenn es auf dasselbe Objekt zeigt). Dies entspricht dem Operator "==" in Java.

Nehmen wir an, wir haben zwei ganze Zahlen definiert:

val a = Integer(10)
val b = Integer(10)

und wir überprüfen beide, indem wira === b ausführen, wodurchfalse zurückgegeben wird, da es sich um zwei separate Objekte handelt, die jeweils auf eine andere Position im Speicher zeigen.

3. Strukturelle Gleichheit

Für die strukturelle Gleichheit verwenden wir nun das==-Symbol, das auswertet, ob beide Werte gleich (oder gleich) sind. Dies wird normalerweise durch die Implementierung derequals()-Methode in Java erreicht.

Wenn wir also dasselbe Beispiel fürIntegersverwenden, müssen wir nura == b ausführen. In diesem Fall wirdtrue zurückgegeben, da beide Variablen denselben Wert haben.

4. Komplexe Objekte vergleichen

Wenn wir die Gleichheit bei komplexeren Objekten überprüfen möchten, verhalten sich die Symbole gleich. Nehmen wir an, wir haben einUser, das eine Liste von Hobbys enthält:

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

Die=== überprüfen die Referenzgleichheit und durch bequeme Verwendung vonList<> können wir den Operator== nutzen, der das Objektand the data contained on the list überprüft.

5. Arrays Gleichheit

FürArrays, ab Kotlin 1.1 können wir die strukturelle Gleichheit überprüfen, indem wir die FunktioneninfixcontentEquals undcontentDeepEquals verwenden:

val hobbies = arrayOf("Hiking, Chess")
val hobbies2 = arrayOf("Hiking, Chess")

assertTrue(hobbies contentEquals hobbies2)

6. Fazit

Dieses kurze Tutorial zeigte anhand eines sehr einfachen Beispiels den Unterschied zwischenreferential and structural equality in Kotlin.

Wie immer kann die Implementierung all dieser Beispiele und Snippets inover on GitHub gefunden werden.

Beachten Sie, dass dies ein Maven-basiertes Projekt ist und daher einfach zu importieren und auszuführen sein sollte.