I allmänhet används både equals() och ”==” operatören i Java för att jämföra objekt för att kontrollera jämlikhet, men här är några av skillnaderna mellan de två:
- Den största skillnaden mellan .equals()-metoden och ==-operatören är att den ena är en metod och den andra en operatör.
- Vi kan använda ==-operatorer för referensjämförelser (adressjämförelser) och .equals()-metoden för innehållsjämförelser. Med enkla ord kontrollerar == om båda objekten pekar på samma minnesplats medan .equals() utvärderar jämförelsen av värdena i objekten.
- Om en klass inte åsidosätter equals-metoden använder den som standard equals(Object o)-metoden i den närmaste överordnade klassen som har åsidosatt denna metod. Se detta för detaljer
- Kodningsexempel:
public
class
Test {
public
static
void
main(String args)
{
String s1 =
new
String(
"HELLO"
);
String s2 =
new
String(
"HELLO"
);
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
Output:
falsetrue
Förklaring: Här skapar vi två objekt, nämligen s1 och s2.
- Både s1 och s2 hänvisar till olika objekt.
- När vi använder ==-operatören för att jämföra s1 och s2 blir resultatet falskt eftersom båda har olika adresser i minnet.
- Om vi använder equals blir resultatet sant eftersom det bara jämför de värden som anges i s1 och s2.
Låt oss förstå båda operatörerna i detalj:
Operatorn för jämlikhet (==)
Vi kan tillämpa operatorer för jämlikhet för alla primitiva typer, inklusive boolska typer.Vi kan också tillämpa operatorer för jämlikhet för objekttyper.
class
Test {
public
static
void
main(String args)
{
System.out.println(
10
==
20
);
System.out.println(
'a'
==
'b'
);
System.out.println(
'a'
==
97.0
);
System.out.println(
true
==
true
);
}
}
Output:
falsefalsetruetrue
Om vi tillämpar == för objekttyper bör det finnas kompatibilitet mellan argumenttyper (antingen barn till förälder eller förälder till barn eller samma typ). Annars kommer vi att få ett kompileringsfel.
class
Test {
public
static
void
main(String args)
{
Thread t =
new
Thread();
Object o =
new
Object();
String s =
new
String(
"GEEKS"
);
System.out.println(t == o);
System.out.println(o == s);
System.out.println(t==s);
}
}
Output:
falsefalse// error: incomparable types: Thread and String
.equals()
I Java jämför metoden string equals() de två givna strängarna utifrån strängens data/innehåll. Om allt innehåll i de båda strängarna är detsamma returnerar den true. Om alla tecken inte stämmer överens returnerar den falskt.
public
class
Test {
public
static
void
main(String args)
{
Thread t1 =
new
Thread();
Thread t2 =
new
Thread();
Thread t3 = t1;
String s1 =
new
String(
"GEEKS"
);
String s2 =
new
String(
"GEEKS"
);
System.out.println(t1 == t3);
System.out.println(t1 == t2);
System.out.println(s1 == s2);
System.out.println(t1.equals(t2));
System.out.println(s1.equals(s2));
}
}
Output:
truefalsefalsefalsetrue
Förklaring: Här använder vi .equals-metoden för att kontrollera om två objekt innehåller samma data eller inte.
- I exemplet ovan skapar vi 3 trådobjekt och 2 strängobjekt.
- I den första jämförelsen kontrollerar vi att t1 == t3 eller inte. Eftersom vi vet att både t1 och t3 pekar på samma objekt återges sant.
- I den andra jämförelsen använder vi operatören ”==” för att jämföra strängobjekten och inte innehållet i objekten. Här är båda objekten olika och därför är resultatet av denna jämförelse ”False”
- När vi jämför två strängobjekt med hjälp av operatören .equals() kontrollerar vi om båda objekten innehåller samma data eller inte.
- Båda objekten innehåller samma sträng, dvs. GEEKS, varför den returnerar true.
Denna artikel har bidragits av Bishal Kumar Dubey. Om du gillar GeeksforGeeks och vill bidra kan du också skriva en artikel via contribute.geeksforgeeks.org eller maila din artikel till [email protected]. Se din artikel dyka upp på GeeksforGeeks huvudsida och hjälp andra Geeks.