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.