Norėdami palyginti „Strings for lygybę“, turėtumėte naudoti „String“ objektą equals
arba equalsIgnoreCase
metodai. Taip pat pamatysime, kodėl neturėtume naudoti ==
operatorius palyginti eilutes.
Jei mums reikia palyginti dvi „Java“ eilutes ir rūpintis stygų apvalkalu, galime naudoti equals()
metodas.
Pvz., Šis fragmentas nustatys, ar du eilutės egzemplioriai yra vienodi visiems simboliams, įskaitant didžiųjų raidžių:
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';
if (firstString.equals(secondString)) {
System.out.println('first and second strings are equal');
}
if (firstString.equals(thirdString)) {
System.out.println('first and third string are equal');
}
} }
Išvestis:
first and second strings are equal
Pastaba:Antrasis atspausdintas sakinys nevykdomas, nes „firstString“ ir „thirdString“ didžiosios raidės nesutampa.Jei mums reikia palyginti dvi „Java“ eilutes, bet nerūpi stygų korpusas, galime naudoti equalsIgnoreCase()
metodas.
Pvz., Anksčiau pateiktame kodo fragmente, jei pakeitėme .equals()
su .equalsIgnoreCase()
metodas, tada bus vykdomi abu spausdinimo teiginiai:
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';
if (firstString.equalsIgnoreCase(secondString)) {
System.out.println('first and second strings are equal');
}
if (firstString.equalsIgnoreCase(thirdString)) {
System.out.println('first and third string are equal');
}
} }
Išvestis:
first and second strings are equal
first and third string are equal
Susijęs:
Šie operatoriai iš tikrųjų tikrina nuorodas ir kadangi keli eilutės objektai gali atstovauti tą pačią eilutę, tai gali pateikti neteisingą atsakymą.
Vietoj to naudokite String.equals(Object)
metodas, kuris palygins String objektus pagal jų vertes.
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test123';
String thirdString = new String('Test123');
if (firstString == secondString) {
System.out.println('first and second strings are equal');
}
if (firstString == thirdString) {
System.out.println('first and third strings are equal');
}
} }
Išvestis:
first and second strings are equal
Pastaba:Antrasis atspausdintas sakinys nevykdomas.Lygindami eilutę su pastovia verte, pastoviąją vertę galite uždėti kairėje lygių pusėje, kad užtikrintumėte, jog negausite NullPointerException
jei kita eilutė yra nulinė.
Pavyzdžiui:
'baz'.equals(foo)
Nors foo.equals('baz')
metės NullPointerException
jei foo yra nulinis, 'baz'.equals(foo)
įvertins false
.
Skaitytesnė alternatyva yra naudoti Objects.equals()
, kuris abiejų parametrų patikrinimą atlieka visiškai:
pvz. Objects.equals(foo, 'baz')
.
Nuo „Java 1.7“ jungiklio sakinyje galima palyginti „String“ kintamąjį su literalais. Įsitikinkite, kad eilutė nėra nulinė, kitaip ji visada išmes NullPointerException
. Vertės lyginamos naudojant String.equals
, t. Y. Didžiosios ir mažosios raidės.
public class CompareTwoStrings {
public static void main(String[] args) {
String stringToSwitch = 'A';
switch (stringToSwitch) {
case 'a':
System.out.println('a');
break;
case 'A':
System.out.println('A'); //the code goes here
break;
case 'B':
System.out.println('B');
break;
default:
break;
}
} }
Šiame įraše mes paaiškinome, kaip palyginti eilutes „Java“ su kodų pavyzdžiais. Kai styginių korpusai yra svarbūs, turėtume naudoti .equals()
o kai apvalkalas nėra svarbus, tada turėtume naudoti .equalsIgnoreCase()
Be to, neturėtume naudoti ==
operatorius palyginti eilutes, nes ==
operatorius tikrina nuorodą, o ne vertę.