I dette indlæg vil vi diskutere forskellen mellem ==-operatoren og equals()-metoden i Java.
==
er en relationel operatør i Java, som bruges til at sammenligne primitive typer såsom int, double, char, float osv. Den bør ikke bruges til at sammenligne to objektreferencer, da x == y
for alle ikke-nul-referenceværdier x og y kun returnerer sandt, når x og y henviser til det samme objekt.
equals()
er på den anden side en metode i Object
-klassen, som bruges til at sammenligne objekter. Den opfører sig på samme måde som operatoren ==
, hvis den ikke overskrives af en klasse. Hver klasse bør overskrive equals()
-metoden i Object
-klassen og angive ækvivalensrelationen på objekter. Ækvivalensrelationen bør være sådan, at equals()
-metoderne evaluerer sammenligningen af værdierne i objekterne, uanset om de to objekter henviser til den samme instans eller ej. Da ens objekter skal have ens hashkoder, er det nødvendigt også at tilsidesætte hashCode()
-metoden.
Da String er et objekt i Java, bør vi altid bruge equals()
-metoden til at sammenligne to strenge i Java. Dette fungerer, da String
-klassen tilsidesætter equals()
-metoden i Object
-klassen.
Som det fremgår af ovenstående program, returnerer sammenligning af to strenge ved hjælp af ==
– og equals()
-metoden forskellige output. Dette skyldes, at ==
udfører en referencesammenligning, dvs. sammenligner, om to variabler henviser til det samme objekt eller ej. Da vi opretter to nye String
-objekter ved hjælp af String
-konstruktøren, vil de ikke dele den samme reference, og s1 == s2
returnerer false. Derfor bør vi aldrig bruge ==
-operatoren til at sammenligne to strenge.
På den anden side sammenligner equals()
-metoden i String
-klassen indholdet af det bagvedliggende char-array og returnerer en boolsk værdi som resultat af sammenligningen.
Men nedenstående kode giver dog andre resultater. Dette skyldes, at String-litteraler gemmes i String-konstantpuljen, og både s1 & s2 vil dele den samme reference. Så s1 == s2
returnerer sandt.
(6 stemmer, gennemsnit: 5,00 ud af 5)
Tak for læsning.