Generelt bruges både equals() og “==” operatoren i Java til at sammenligne objekter for at kontrollere lighed, men her er nogle af forskellene mellem de to:
- Hovedforskellen mellem .equals()-metoden og ==-operatoren er, at den ene er en metode og den anden er en operatør.
- Vi kan bruge ==-operatorer til referencesammenligning (adressesammenligning) og .equals()-metoden til indholdssammenligning. Med enkle ord kontrollerer ==, om begge objekter peger på den samme hukommelsesplacering, mens .equals() evaluerer sammenligningen af værdierne i objekterne.
- Hvis en klasse ikke tilsidesætter equals-metoden, bruger den som standard equals(Object o)-metoden i den nærmeste overordnede klasse, som har tilsidesat denne metode. Se dette for detaljer
- Kodeeksempel:
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
Oplysning: Her opretter vi to objekter, nemlig s1 og s2.
- Både s1 og s2 henviser til forskellige objekter.
- Når vi bruger ==-operatoren til sammenligning af s1 og s2, er resultatet falsk, da begge har forskellige adresser i hukommelsen.
- Hvis vi bruger equals, er resultatet sandt, fordi det kun sammenligner de værdier, der er angivet i s1 og s2.
Lad os forstå begge operatorer i detaljer:
Lighedsoperator(==)
Vi kan anvende lighedsoperatorer for alle primitive typer, herunder boolske typer. vi kan også anvende lighedsoperatører for 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
Hvis vi anvender == for objekttyper, bør der være kompatibilitet mellem argumenttyper (enten barn til forælder eller forælder til barn eller samme type). Ellers får vi en kompileringstidsfejl.
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 sammenligner metoden string equals() de to givne strenge på baggrund af dataene/indholdet i strengen. Hvis alt indholdet af begge strenge er det samme, returnerer den sandt. Hvis alle tegn ikke stemmer overens, returnerer den false.
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
Oplysning: Her bruger vi .equals-metoden til at kontrollere, om to objekter indeholder de samme data eller ej.
- I ovenstående eksempel opretter vi 3 Thread-objekter og 2 String-objekter.
- I den første sammenligning kontrollerer vi, om t1 == t3 eller ej. Som vi ved, at både t1 og t3 peger på samme objekt, hvorfor den returnerer sandt.
- I den anden sammenligning bruger vi operatoren “==” til at sammenligne Stringobjekterne og ikke indholdet af objekterne. Her er begge objekter forskellige, og resultatet af denne sammenligning er derfor “False”
- Når vi sammenligner 2 String-objekter ved hjælp af .equals() operatoren, kontrollerer vi, om begge objekter indeholder de samme data eller ej.
- Både objekter indeholder den samme String, dvs. GEEKS, hvorfor den returnerer sandt.
Denne artikel er bidraget af Bishal Kumar Dubey. Hvis du kan lide GeeksforGeeks og gerne vil bidrage, kan du også skrive en artikel ved hjælp af contribute.geeksforgeeks.org eller sende din artikel pr. mail til [email protected]. Se din artikel blive vist på GeeksforGeeks’ hovedside, og hjælp andre nørder.