Using toLowerCase()
or toUpperCase()
to make case insensitive comparisons is inefficient because it requires the creation
of temporary, intermediate String
objects.
Noncompliant code example
private void compareStrings(String foo, String bar){
boolean result1 = foo.toUpperCase().equals(bar); // Noncompliant
boolean result2 = foo.equals(bar.toUpperCase()); // Noncompliant
boolean result3 = foo.toLowerCase().equals(bar.toLowerCase()); // Noncompliant
}
Compliant solution
private void compareStrings(String foo, String bar){
boolean result1 = foo.equalsIgnoreCase(bar); // Compliant
}
Exceptions
No issue will be raised when a locale is specified because the result could be different from equalsIgnoreCase()
. (e.g.: using the
Turkish locale)
private void compareStrings(String foo, String bar, java.util.Locale locale){
boolean result1 = foo.toUpperCase(locale).equals(bar); // Compliant
}