Forskellen mellem at sammenligne String ved hjælp af == og .equals() metoden i Java
Både equals() metode og == operatør bruges til at sammenligne to objekter i Java.
Det Java string equals() metode , sammenligner to strenge og returnerer sand, hvis alle tegn matcher i begge strenge, ellers returnerer falsk.
Det == operatør sammenligner reference- eller hukommelsesplaceringen af objekter i en bunke, uanset om de peger på den samme placering eller ej.
Hver gang vi opretter et objekt ved hjælp af operatoren ny , vil det skabe en ny hukommelsesplacering for det objekt. Så vi bruger == operatoren til at kontrollere hukommelsesplacering eller adresse på to objekter er ens eller ej.
Generelt er både lig () og == operatorerne i Java bruges til at sammenligne objekter for at kontrollere lighed, men her er nogle af forskellene mellem de to:
- Den væsentligste forskel mellem .equals() metode og == operatør er, at den ene er en metode, og den anden er operatøren.
- Vi kan bruge == operatorer til referencesammenligning ( adresse sammenligning ) og .equals() metode til indholdssammenligning . Med enkle ord kontrollerer ==, om begge objekter peger på den samme hukommelsesplacering, mens .equals() evaluerer til sammenligning af værdier i objekterne.
- Hvis en klasse ikke gør det tilsidesætte lighedsmetoden , så bruger den som standard metoden equals(Object o) for den nærmeste overordnede klasse, der har tilsidesat denne metode. **Se Hvorfor tilsidesætte equals(Object) og hashCode()-metoden? i detaljer.
Eksempel:
String er lig med () metode og == operator i Java.
Java
// Java program to understand> // the concept of == operator> public> class> Test {> > public> static> void> main(String[] args)> > {> > String s1 => 'HELLO'> ;> > String s2 => 'HELLO'> ;> > String s3 => new> String(> 'HELLO'> );> > System.out.println(s1 == s2);> // true> > System.out.println(s1 == s3);> // false> > System.out.println(s1.equals(s2));> // true> > System.out.println(s1.equals(s3));> // true> > }> }> |
Produktion
true false true true
Forklaring: Her opretter vi to objekter, nemlig s1 og s2.
- Både s1 og s2 refererer til de samme objekter.
- Når vi bruger == operatoren til s1 og s2 sammenligning, er resultatet sandt, da begge har de samme adresser i snor konstant pool.
- Ved at bruge lig, er resultatet sandt, fordi det kun sammenligner værdierne givet i s1 og s2.
Java String Pool
| s1 = HEJ |
| s2 = HEJ |
Java-bunke
| s3 = HEJ |
Lad os forstå begge operatører i detaljer:
Ligestillingsoperatør(==)
Vi kan anvende ligestillingsoperatorer for enhver primitiv type, inklusive den booleske type. Vi kan også anvende lighedsoperatorer for objekttyper.
Eksempel:
== operator i Java.
Java
// Java program to illustrate> // == operator for compatible data> // types> class> Test {> > public> static> void> main(String[] args)> > {> > // integer-type> > System.out.println(> 10> ==> 20> );> > // char-type> > System.out.println(> 'a'> ==> 'b'> );> > // char and double type> > System.out.println(> 'a'> ==> 97.0> );> > // boolean type> > System.out.println(> true> ==> true> );> > }> }> |
Produktion
false false true true
Hvis vi anvender == for objekttyper så, der skal være kompatibilitet mellem argumenttyper (enten barn til forælder eller forælder til barn eller samme type). Ellers får vi en kompileringsfejl.
Eksempel:
Java
// Java program to illustrate> // == operator for incompatible data types> 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);> > // Uncomment to see error> > System.out.println(t==s);> > }> }> |
Produktion:
false false // error: incomparable types: Thread and String
Java-streng er lig med() metode
I Java er String equals() metode sammenligner de to givne strenge baseret på data/indhold af strengen. Hvis alt indholdet af begge strenge er det samme, er det returnerer sandt . Hvis alle tegn ikke matches, så er det returnerer falsk .
Syntaks:
Syntaks : offentlig boolesk lig (Object anotherObject)
Parameter :
- andet objekt- String, der skal sammenlignes
Vender tilbage:
- Boolesk værdi :
- rigtigt- Hvis strenge er ens
- falsk- hvis strenge ikke er ens
Eksempel:
String equals() metode i Java
Java
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));> > }> }> |
Produktion:
true false false false true
Forklaring: Her bruger vi .equals-metoden til at kontrollere, om to objekter indeholder de samme data eller ej.
- I ovenstående eksempel opretter vi 3 trådobjekter og 2 strengobjekter.
- I den første sammenligning tjekker vi om t1 == t3 eller ej. Som vi kender begge dele t1 og t3 peger på samme genstand . Det er derfor, det vender tilbage.
- I den anden sammenligning bruger vi operatoren == til at sammenligne strengobjekterne og ikke indholdet af objekterne. Her er begge objekter forskellige, og derfor er resultatet af denne sammenligning falsk.
- Når vi sammenligner 2 String-objekter med equals()-operatoren, så kontrollerer vi, om begge objekter indeholder de samme data eller ej.
- Begge objekter indeholder den samme streng, dvs. NØRD. Det er derfor, det vender tilbage.
Læs også:
- Character.equals() metode i Java med eksempler
- ==, er lig med(), compareTo(), equalsIgnoreCase() og compare()
Konklusion
Java string equals() metode og == operator bruges begge til at sammenligne strenge i Java. I denne tutorial har vi dækket ==operator og String equals()-metoden i Java med eksempler.
Read More String Methods in Java
Forskellen mellem == og .equals()-metoden - ofte stillede spørgsmål
1. Hvad er forskellen mellem str1 == str2 og str1 er lig med str2?
I Java vil str1==str2 returnere sand, hvis str1 og str2 er strenge med samme indhold. Dette skyldes, at strenge med det samme indhold er gemt på samme sted.
str1.equals(str2) vil returnere sand, hvis str1 og str 2 er forskellige strengobjekter, men har samme indhold.
2. Hvad er forskellen mellem == og lig i strengsammenligning?
Det string equals() metode sammenligner to strenge og returnerer sand, hvis alle tegn matcher i begge strenge, ellers returnerer falsk.
==-operatoren sammenligner reference- eller hukommelsesplaceringen af objekter i en bunke, uanset om de peger på den samme placering eller ej.
3. Hvad er reglerne for equals()-metoden?
- Refleksivitet: For ethvert objekt x skal x.equals(x) altid returnere sand.
- Symmetri : Hvis x.equals(y) returnerer sand, så skal y.equals(x) også returnere sand.
- Transitivitet : Hvis x.equals(y) og y.equals(z) begge er sande, så skal x.equals(z) også være sande.
- Konsistens : Flere påkaldelser af x.equals(y) skulle returnere det samme resultat.
- Ikke-ugyldighed: Metoden equals() bør aldrig returnere sand sammenlignet med null.