För att jämföra strängar för jämlikhet bör du använda strängobjektets equals
eller equalsIgnoreCase
metoder. Vi kommer också att se varför vi inte ska använda ==
för att jämföra strängar.
Om vi behöver jämföra två strängar i java och också bry oss om strängens hölje kan vi använda equals()
metod.
Följande utdrag kommer till exempel att avgöra om de två instanserna av String är lika för alla tecken inklusive hölje:
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');
}
} }
Produktion:
first and second strings are equal
Notera:Det andra utskriftsuttalandet körs inte eftersom höljet för firstString och thirdString inte matchar.Om vi behöver jämföra två strängar i java men inte bryr oss om strängarnas hölje kan vi använda equalsIgnoreCase()
metod.
Till exempel i kodavsnittet ovan, om vi ersatte .equals()
med .equalsIgnoreCase()
metod, då körs båda utskriftsuttalanden:
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');
}
} }
Produktion:
first and second strings are equal
first and third string are equal
Relaterad:
Dessa operatörer testar faktiskt referenser, och eftersom flera strängobjekt kan representera samma sträng kan detta ge fel svar.
Använd istället String.equals(Object)
metod, som jämför strängobjekten baserat på deras värden.
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');
}
} }
Produktion:
first and second strings are equal
Notera:Det andra utskriftsuttalandet körs inte.När du jämför en sträng med ett konstant värde kan du placera det konstanta värdet till vänster om lika för att säkerställa att du inte får ett NullPointerException
om den andra strängen är noll.
Till exempel:
'baz'.equals(foo)
Medan foo.equals('baz')
kommer att kasta ett NullPointerException
om foo är noll, 'baz'.equals(foo)
utvärderas till false
.
Ett mer läsbart alternativ är att använda Objects.equals()
, som gör en nollkontroll på båda parametrarna:
t.ex. Objects.equals(foo, 'baz')
.
Från och med Java 1.7 är det möjligt att jämföra en strängvariabel med bokstäver i ett switch-uttalande. Se till att strängen inte är null, annars kastar den alltid ett NullPointerException
. Värden jämförs med String.equals
, dvs. skiftlägeskänslig.
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;
}
} }
I det här inlägget förklarade vi hur man jämför strängar i java med kodexempel. När höljet på strängarna är viktigt bör vi använda .equals()
och när höljet inte är viktigt, ska vi använda .equalsIgnoreCase()
.
Dessutom bör vi inte använda ==
för att jämföra strängar, som ==
operatören kontrollerar referensen och inte värdet.