Différence entre les opérateurs "==" et "===" de Kotlin

Différence entre les opérateurs "==" et "===" de Kotlin

1. Vue d'ensemble

Dans cet article, nous allons parler desdifference between “==” and “===” operators in Kotlin.

Dans Kotlin, tout comme en Java, nous avons deux concepts différents d'égalité,Referential equality etStructural equality.

2. Égalité référentielle

Pour l'égalité référentielle, nous utilisons le symbole=== qui nous permet d'évaluer la référence d'un objet (s'il pointe vers le même objet). C'est un équivalent de l'opérateur "==" en Java.

Disons que nous avons défini deux entiers:

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

et nous les vérifions tous les deux en faisanta === b, qui retournerafalse car ce sont deux objets séparés, chacun pointant vers un emplacement différent en mémoire.

3. Égalité structurelle

Maintenant, pour l'égalité structurelle, nous utilisons le symbole== qui évalue si les deux valeurs sont identiques (ou égales). Ceci est généralement réalisé en implémentant la méthodeequals() en Java.

Donc, en utilisant le même exemple deIntegers, nous devons juste fairea == b, et dans ce cas, il retourneratrue, puisque les deux variables ont la même valeur.

4. Comparaison d'objets complexes

Si nous voulons vérifier l'égalité sur des objets plus complexes, les symboles se comporteront de la même manière. Disons que nous avons unUser, qui a une liste de passe-temps:

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

Le=== vérifiera l'égalité des références et en utilisant commodément unList<>, nous pouvons profiter de l'opérateur==, qui vérifiera l'objetand the data contained on the list.

5. Égalité des tableaux

PourArrays, à partir de Kotlin 1.1, nous pouvons vérifier l'égalité structurelle en utilisant les fonctionsinfixcontentEquals etcontentDeepEquals:

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

assertTrue(hobbies contentEquals hobbies2)

6. Conclusion

Ce tutoriel rapide, a montré la différence entrereferential and structural equality in Kotlin, à travers un exemple très simple.

Comme toujours, l'implémentation de tous ces exemples et extraits de code peut être trouvéeover on GitHub.

Notez qu'il s'agit d'un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.