KLASĖS IR METODAI
Java String equals() metodas
equals() palygina dviejų String objektų tekstinį turinį. Jei simbolių seka vienoda, metodas grąžina true; jei skiriasi – false.
Tekstų palyginimas
String pirmasVardas = "Rūta";
String antrasVardas = "Rūta";
String treciasVardas = "Mantas";
System.out.println(pirmasVardas.equals(antrasVardas));
System.out.println(pirmasVardas.equals(treciasVardas));true
false
pirmasVardasirantrasVardassaugo tokį patį tekstą Rūta.equals()palygina jų raides ta pačia tvarka, todėl pirmas rezultatas yratrue.treciasVardassaugo tekstą Mantas.- Jo turinys skiriasi, todėl antras palyginimas grąžina
false.
Metodo sintaksė
String klasėje metodas aprašytas taip:
public boolean equals(Object anotherObject)
| Dalis | Reikšmė |
|---|---|
| Kviečiantis objektas | pirmasVardas eilutėje pirmasVardas.equals(...) |
| Parametras | anotherObject – kitas lyginamas objektas |
| Grąžinamas tipas | boolean |
| Rezultatas | true, kai turinys vienodas; kitu atveju false |
Parametras yra Object tipo, nes equals() metodas kilęs iš bendros Object klasės. String jį perrašo taip, kad būtų lyginama simbolių seka.
equals() ir == nėra tas pats
String pirmas = new String("Labas");
String antras = new String("Labas");
System.out.println(pirmas == antras);
System.out.println(pirmas.equals(antras));false
true
- Abu
new String("Labas")iškvietimai sukuria atskirus objektus. pirmas == antrasklausia, ar abi nuorodos rodo į tą patį objektą. Jos nerodo, todėl gaunamasfalse.pirmas.equals(antras)palygina abiejų objektų tekstą.- Abu tekstai yra Labas, todėl
equals()grąžinatrue.
| Savybė | == operatorius | equals() metodas |
|---|---|---|
| Paskirtis | Lygina primityviąsias reikšmes arba objektų nuorodas | Lygina objektų loginę lygybę |
| Naudojamas su | Primityviaisiais tipais ir objektais | Tik objektais |
| Objektų palyginimas | Tikrina, ar nuorodos rodo į tą patį objektą | Gali tikrinti objektų turinį |
| Primityviųjų tipų palyginimas | Lygina tikras reikšmes | Netaikomas |
| Grąžina | boolean | boolean |
| Galima perrašyti? | Ne | Taip |
| Numatytasis objektų elgesys | Lygina nuorodas | Object.equals() lygina nuorodas, jei klasė metodo neperrašė |
| String palyginimas | Lygina nuorodas | Lygina simbolių seką |
| Geriausia paskirtis | Primityvioms reikšmėms arba sąmoningam tapatumo tikrinimui | Loginei objektų ar teksto lygybei |
Su primityviaisiais tipais naudok ==
int pirmas = 12;
int antras = 12;
System.out.println(pirmas == antras);true
int nėra objektas ir neturi metodų, todėl negalima rašyti pirmas.equals(antras). Čia == tiesiogiai palygina dvi skaitines reikšmes.
Kodėl == kartais grąžina true?
String a = "kava";
String b = "kava";
String c = new String("kava");
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a.equals(c));true
false
true
Java gali pakartotinai naudoti vienodus teksto literalus iš String pool, todėl a ir b gali nurodyti tą patį objektą. Tačiau iš kitur gautas ar su new sukurtas toks pats tekstas gali būti atskiras objektas. Dėl to teksto turinio nereikia lyginti su == – naudok equals().
Raidžių dydis yra svarbus
String ivestasMiestas = "vilnius";
System.out.println(ivestasMiestas.equals("Vilnius"));
System.out.println(ivestasMiestas.equalsIgnoreCase("Vilnius"));false
true
equals() skiria didžiąsias ir mažąsias raides, todėl vilnius nėra lygus Vilnius. Kai raidžių dydžio sąmoningai nenori vertinti, galima naudoti equalsIgnoreCase().
Saugus palyginimas su null
String atsakymas = null;
System.out.println("taip".equals(atsakymas));
// atsakymas.equals("taip") sukeltų NullPointerExceptionfalse
Metodo negalima iškviesti per null nuorodą. Kai viena reikšmė yra žinomas teksto literalas, metodą galima kviesti per jį: "taip".equals(atsakymas). Jei abi reikšmės gali būti null, naudinga Objects.equals(pirmas, antras).
Ką verta prisiminti?
String.equals()lygina teksto simbolių seką.==su objektais tikrina, ar nuorodos rodo į tą patį objektą.==yra tinkamas primityviosioms reikšmėms.equals()grąžinabooleanreikšmę.equals()skiria didžiąsias ir mažąsias raides.- Nekviesk metodo per galimą
nullnuorodą.

