Verschil tussen "==" en "===" operators in Kotlin

1. Overzicht

In dit artikel gaan we het hebben over de verschil tussen "==" en "===" operators in Kotlin.

In Kotlin hebben we, net als in Java, twee verschillende concepten van gelijkheid, Referentiële gelijkheid, en Structurele gelijkheid.

2. Referentiële gelijkheid

Voor referentiële gelijkheid gebruiken we de === symbool waarmee we de referentie van een object kunnen evalueren (als het naar hetzelfde object verwijst). Dit is een equivalent van de "==" -operator in Java.

Laten we zeggen dat we twee gehele getallen hebben gedefinieerd:

val a = Geheel getal (10) val b = Geheel getal (10)

en we controleren ze allebei door te doen a === b, die zal terugkeren false omdat het twee afzonderlijke objecten zijn, die elk naar een andere locatie in het geheugen wijzen.

3. Structurele gelijkheid

Nu gebruiken we voor structurele gelijkheid de == symbool dat evalueert of beide waarden hetzelfde (of gelijk) zijn. Dit wordt meestal bereikt door te implementeren is gelijk aan () methode in Java.

Dus met hetzelfde Gehele getallen we hoeven bijvoorbeeld alleen maar te doen a == b, en in dit geval zal het terugkeren waar, aangezien beide variabelen dezelfde waarde hebben.

4. Complexe objecten vergelijken

Als we de gelijkheid van complexere objecten willen controleren, zullen de symbolen zich hetzelfde gedragen. Laten we zeggen dat we een Gebruiker, die een lijst met hobby's heeft:

dataklasse Gebruiker (val name: String, val age: Int, val hobbies: List)

De === zal referentie gelijkheid controleren en door gemakkelijk een Lijst we kunnen profiteren dat de == operator, die het object controleert en de gegevens op de lijst.

5. Gelijkheid van arrays

Voor Arrays, Vanaf Kotlin 1.1 kunnen we structurele gelijkheid controleren door de infix functies contentEquals en contentDeepEquals:

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

6. Conclusie

Deze korte tutorial toonde het verschil tussen referentiële en structurele gelijkheid in Kotlin, aan de hand van een heel eenvoudig voorbeeld.

Zoals altijd is de implementatie van al deze voorbeelden en fragmenten te vinden op GitHub.

Merk op dat dit een op Maven gebaseerd project is, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.