Forskellen mellem "==" og "===" operatører i Kotlin

1. Oversigt

I denne artikel skal vi tale om forskellen mellem “==” og “===” operatører i Kotlin.

I Kotlin har vi, ligesom i Java, to forskellige begreber om lighed, Referanselighedog Strukturel lighed.

2. Henvisning til ligestilling

For referentiel lighed bruger vi === symbol, der giver os mulighed for at evaluere referencen for et objekt (hvis det peger på det samme objekt). Dette svarer til "==" operatøren i Java.

Lad os sige, at vi har to heltal defineret:

val a = heltal (10) val b = heltal (10)

og vi kontrollerer dem begge ved at gøre a === b, som vender tilbage falsk fordi de er to separate objekter, der hver peger på et andet sted i hukommelsen.

3. Strukturel lighed

Nu til strukturel lighed bruger vi == symbol, der evaluerer, om begge værdier er ens (eller ens). Dette opnås normalt ved at implementere lige med() metode i Java.

Så ved at bruge det samme Heltal for eksempel skal vi bare gøre a == b, og i dette tilfælde vender det tilbage rigtigt, da begge variabler har den samme værdi.

4. Sammenligning af komplekse objekter

Hvis vi vil kontrollere lighed på mere komplekse objekter, opfører symbolerne sig det samme. Lad os sige, at vi har en Bruger, som har en liste over hobbyer:

dataklasse Bruger (val navn: streng, val alder: Int, val hobbyer: Liste)

Det === vil kontrollere reference lighed og ved bekvemt at bruge en Liste vi kan drage fordel af, at == operatør, som kontrollerer objektet og dataene på listen.

5. Arrays Ligestilling

Til Arrays, fra og med Kotlin 1.1 kan vi kontrollere strukturel lighed ved hjælp af infix funktioner contentEquals og contentDeepEquals:

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

6. Konklusion

Denne hurtige vejledning viste forskellen mellem refererende og strukturelle lighed i Kotlingennem et meget simpelt eksempel.

Som altid kan implementeringen af ​​alle disse eksempler og uddrag findes på GitHub.

Bemærk, at dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.


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