Forskjellen mellom “==” og “===” operatører i Kotlin

1. Oversikt

I denne artikkelen skal vi snakke om forskjellen mellom “==” og “===” operatører i Kotlin.

I Kotlin har vi, akkurat som i Java, to forskjellige begreper om likhet, Referanselikhet, og Strukturell likhet.

2. Referanselikhet

For referanselikhet bruker vi === symbol som lar oss evaluere referansen til et objekt (hvis det peker på det samme objektet). Dette tilsvarer operatøren “==” i Java.

La oss si at vi har to heltall definert:

val a = Heltall (10) val b = Heltall (10)

og vi sjekker dem begge ved å gjøre a === b, som kommer tilbake falsk fordi de er to separate objekter, som hver peker på et annet sted i minnet.

3. Strukturell likhet

Nå for strukturell likhet bruker vi == symbol som evaluerer om begge verdiene er like (eller like). Dette oppnås vanligvis ved å implementere er lik() metode i Java.

Så ved å bruke det samme Heltall for eksempel trenger vi bare å gjøre a == b, og i dette tilfellet vil den komme tilbake ekte, siden begge variablene har samme verdi.

4. Sammenligne komplekse objekter

Hvis vi vil sjekke likhet på mer komplekse objekter, vil symbolene oppføre seg likt. La oss si at vi har en Bruker, som har en liste over hobbyer:

dataklasse Bruker (val navn: String, val alder: Int, val hobbyer: Liste)

De === vil sjekke referanselikhet og ved å bruke en Liste vi kan dra nytte av at == operatøren, som vil kontrollere objektet og dataene på listen.

5. Arrays Likhet

Til Arrays, fra og med Kotlin 1.1 kan vi sjekke strukturell likhet ved å bruke infix funksjoner contentEquals og contentDeepEquals:

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

6. Konklusjon

Denne raske opplæringen viste forskjellen mellom referanse og strukturell likhet i Kotlin, gjennom et veldig enkelt eksempel.

Som alltid kan implementeringen av alle disse eksemplene og utdragene finnes på GitHub.

Merk at dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found