Skillnaden mellan == och equals() i Java

I det här inlägget kommer vi att diskutera skillnaden mellan ==-operatorn och equals()-metoden i Java.

== är en relationell operatör i Java som används för att jämföra primitiva typer som int, double, char, float etc. Den bör inte användas för att jämföra två objektreferenser eftersom x == y för alla icke-noll-referensvärden x och y endast returnerar sant om x och y hänvisar till samma objekt.

equals() är å andra sidan en metod i klassen Object som används för att jämföra objekt. Den beter sig på samma sätt som operatorn == om den inte överstyrs av en klass. Varje klass bör åsidosätta equals()-metoden i Object-klassen och ange ekvivalensrelationen för objekt. Ekvivalensrelationen bör vara sådan att equals()-metoderna utvärderar jämförelsen av värdena i objekten oavsett om de två objekten hänvisar till samma instans eller inte. Eftersom likvärdiga objekt måste ha likvärdiga hashkoder är det nödvändigt att åsidosätta hashCode()-metoden också.

Då String är ett objekt i Java bör vi alltid använda equals()-metoden för att jämföra två strängar i Java. Detta fungerar eftersom String-klassen åsidosätter equals()-metoden i Object-klassen.

Som framgår av ovanstående program ger jämförelsen av två strängar med hjälp av ==– och equals()-metoden olika resultat. Detta beror på att == utför en referensjämförelse, dvs. jämför om två variabler hänvisar till samma objekt eller inte. Eftersom vi skapar två nya String-objekt med hjälp av String-konstruktören kommer de inte att dela samma referens och s1 == s2 returnerar falskt. Därför bör vi aldrig använda == operatorn för att jämföra två strängar.

Å andra sidan jämför equals() metoden i String klassen innehållet i den backade char arrayen och returnerar ett boolskt värde som resultat av jämförelsen.

Men nedanstående kod ger andra resultat. Detta beror på att stränglitteraler lagras i String constant pool, och både s1 & s2 kommer att dela samma referens. Så s1 == s2 returnerar true.

(6 röster, medelvärde: 5,00 av 5)

Tack för att du läst.

Lämna ett svar

Din e-postadress kommer inte publiceras.