Forskellen mellem == og equals() i Java

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.