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));
Konsolės rezultatas

true
false

  1. pirmasVardas ir antrasVardas saugo tokį patį tekstą Rūta.
  2. equals() palygina jų raides ta pačia tvarka, todėl pirmas rezultatas yra true.
  3. treciasVardas saugo tekstą Mantas.
  4. Jo turinys skiriasi, todėl antras palyginimas grąžina false.

Metodo sintaksė

String klasėje metodas aprašytas taip:

public boolean equals(Object anotherObject)

equals() metodo dalys
DalisReikšmė
Kviečiantis objektaspirmasVardas eilutėje pirmasVardas.equals(...)
ParametrasanotherObject – kitas lyginamas objektas
Grąžinamas tipasboolean
Rezultatastrue, 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));
Konsolės rezultatas

false
true

  1. Abu new String("Labas") iškvietimai sukuria atskirus objektus.
  2. pirmas == antras klausia, ar abi nuorodos rodo į tą patį objektą. Jos nerodo, todėl gaunamas false.
  3. pirmas.equals(antras) palygina abiejų objektų tekstą.
  4. Abu tekstai yra Labas, todėl equals() grąžina true.
== operatoriaus ir equals() metodo skirtumai
Savybė== operatoriusequals() metodas
PaskirtisLygina primityviąsias reikšmes arba objektų nuorodasLygina objektų loginę lygybę
Naudojamas suPrimityviaisiais tipais ir objektaisTik objektais
Objektų palyginimasTikrina, ar nuorodos rodo į tą patį objektąGali tikrinti objektų turinį
Primityviųjų tipų palyginimasLygina tikras reikšmesNetaikomas
Grąžinabooleanboolean
Galima perrašyti?NeTaip
Numatytasis objektų elgesysLygina nuorodasObject.equals() lygina nuorodas, jei klasė metodo neperrašė
String palyginimasLygina nuorodasLygina simbolių seką
Geriausia paskirtisPrimityvioms reikšmėms arba sąmoningam tapatumo tikrinimuiLoginei objektų ar teksto lygybei

Su primityviaisiais tipais naudok ==

int pirmas = 12;
int antras = 12;

System.out.println(pirmas == antras);
Konsolės rezultatas

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));
Konsolės rezultatas

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"));
Konsolės rezultatas

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ų NullPointerException
Konsolės rezultatas

false

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ąžina boolean reikšmę.
  • equals() skiria didžiąsias ir mažąsias raides.
  • Nekviesk metodo per galimą null nuorodą.