Skirtumas tarp eilutės palyginimo naudojant == ir .equals() metodus Java programoje
Tiek equals() metodas ir == operatorius yra naudojami dviem Java objektams palyginti.
The Java string equals() metodas , lygina dvi eilutes ir pateikia „true“, jei visi simboliai atitinka abiejose eilutėse, kitu atveju grąžina „false“.
The == operatorius lygina objektų, esančių krūvoje, atskaitos arba atminties vietą, nesvarbu, ar jie nurodo tą pačią vietą, ar ne.
Kai kuriame objektą naudodami operatorių naujas , jis sukurs a nauja atminties vieta tam objektui. Taigi, norėdami patikrinti, ar dviejų objektų atminties vieta arba adresas yra vienodi, ar ne, naudojame operatorių ==.
Apskritai operatoriai yra lygūs () ir == Java naudojami objektams palyginti, kad būtų patikrinta lygybė, tačiau čia yra keletas skirtumų tarp šių dviejų:
- Pagrindinis skirtumas tarp .equals() metodas ir == operatorius yra tai, kad vienas yra metodas, o kitas yra operatorius.
- Galime naudoti == operatorius nuorodų palyginimui ( adresų palyginimas ) ir .equals() metodas turinio palyginimas . Paprastais žodžiais tariant, == patikrina, ar abu objektai nukreipia į tą pačią atminties vietą, o .equals() įvertina objektų verčių palyginimą.
- Jei klasė neturi nepaisyti lygybės metodo , tada pagal numatytuosius nustatymus jis naudoja artimiausios pirminės klasės metodą equals(Object o), kuris nepaisė šio metodo. **Matyti Kodėl verta nepaisyti lygybės(Object) ir hashCode() metodų? detaliai.
Pavyzdys:
String equals() metodas ir == operatorius 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> > }> }> |
Išvestis
true false true true
Paaiškinimas: Čia sukuriame du objektus, būtent s1 ir s2.
- Tiek s1, tiek s2 nurodo tuos pačius objektus.
- Kai s1 ir s2 palyginimui naudojame operatorių ==, rezultatas yra teisingas, nes abu turi tuos pačius adresus styga nuolatinis baseinas.
- Naudojant lygias, rezultatas yra teisingas, nes lyginamos tik s1 ir s2 nurodytos reikšmės.
Java stygų baseinas
| s1 = SVEIKI |
| s2 = SVEIKI |
Java krūva
| s3 = SVEIKAS |
Leiskite mums išsamiai suprasti abu operatorius:
Lygybės operatorius(==)
Galime taikyti lygybės operatorius kiekvienam primityviam tipui, įskaitant loginį tipą. Taip pat objektų tipams galime taikyti lygybės operatorius.
Pavyzdys:
== operatorius 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> );> > }> }> |
Išvestis
false false true true
Jei objektų tipams taikysime ==, tada ten turėtų būti suderinamumas tarp argumentų tipų (arba vaikas tėvui, arba vienas iš tėvų vaikui arba to paties tipo). Priešingu atveju gausime kompiliavimo laiko klaidą.
Pavyzdys:
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);> > }> }> |
Išvestis:
false false // error: incomparable types: Thread and String
Java String equals() metodas
Java programoje String equals() metodas lygina dvi pateiktas eilutes pagal eilutės duomenis / turinį. Jei visas abiejų eilučių turinys yra vienodas, tai grįžta tiesa . Jei visi simboliai nesutampa, tada tai grąžina klaidingą .
Sintaksė:
Sintaksė : vieša loginė vertė (Objektas kitas objektas)
Parametras :
- kitas objektas - Lyginama eilutė
Grąžinimai:
- Būlio vertė :
- tiesa- Jei eilutės yra lygios
- klaidinga- jei stygos nelygios
Pavyzdys:
String equals() metodas 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));> > }> }> |
Išvestis:
true false false false true
Paaiškinimas: Čia mes naudojame .equals metodą, kad patikrintume, ar dviejuose objektuose yra tie patys duomenys, ar ne.
- Aukščiau pateiktame pavyzdyje sukuriame 3 Thread objektus ir 2 String objektus.
- Pirmajame palyginime patikriname, ar t1 == t3, ar ne. Kaip žinome abu t1 ir t3 nurodo į tas pats objektas . Štai kodėl tai grįžta tiesa.
- Antrajame palyginime mes naudojame operatorių ==, kad palygintume eilutės objektus, o ne objektų turinį. Čia abu objektai yra skirtingi, todėl šio palyginimo rezultatas yra klaidingas.
- Kai lyginame 2 eilutės objektus naudodami operatorių equals (), tada patikriname, ar abiejuose objektuose yra tie patys duomenys, ar ne.
- Abiejuose objektuose yra ta pati eilutė, ty GEEKS. Štai kodėl tai grįžta tiesa.
Taip pat skaitykite:
- Character.equals() metodas Java su pavyzdžiais
- ==, lygus(), palyginti su(), lygusIgnoreCase() ir palyginti()
Išvada
„Java“ eilutės lygis () metodas ir == operatorius naudojami „Java“ eilutėms palyginti. Šioje pamokoje mes apžvelgėme ==operator ir String equals() metodą Java programoje su pavyzdžiais.
Read More String Methods in Java
Skirtumas tarp == ir .equals() metodų – DUK
1. Kuo skiriasi str1 == str2 ir str1 lygus str2?
Java, str1==str2 grąžins true, jei str1 ir str2 yra to paties turinio eilutės. Taip yra todėl, kad to paties turinio eilutės saugomos toje pačioje vietoje.
str1.equals(str2) grąžins true, jei str1 ir str 2 yra skirtingi eilutės objektai, bet turi tą patį turinį.
2. Kuo skiriasi == ir lygiai lyginant eilutes?
The String equals() metodas lygina dvi eilutes ir grąžina „true“, jei visi simboliai atitinka abiejose eilutėse, kitu atveju grąžina „false“.
== operatorius lygina objektų, esančių krūvoje, atskaitos arba atminties vietą, nesvarbu, ar jie nurodo tą pačią vietą, ar ne.
3. Kokios yra lygybės() metodo taisyklės?
- Refleksyvumas: Bet kurio objekto x atveju x.equals(x) visada turi grąžinti true.
- Simetrija : Jei x.equals(y) grąžina true, tada y.equals(x) taip pat turi grąžinti true.
- Tranzityvumas : Jei x.equals(y) ir y.equals(z) yra teisingi, tada x.equals(z) taip pat turi būti teisingi.
- Nuoseklumas : Keli x.equals(y) iškvietimai turėtų pateikti tą patį rezultatą.
- Negaliojimas: Metodas equals() niekada neturėtų grąžinti true, lyginant su null.