Why is this an issue?
Using toLowerCase()
or toUpperCase()
to make case insensitive comparisons is inefficient because it requires the creation
of temporary, intermediate String
objects.
Noncompliant code example
boolean result1 = foo.toUpperCase().equals(bar); // Noncompliant
boolean result2 = foo.equals(bar.toUpperCase()); // Noncompliant
boolean result3 = foo.toLowerCase().equals(bar.LowerCase()); // Noncompliant
Compliant solution
boolean result = 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)
boolean result1 = foo.toUpperCase(locale).equals(bar); // Compliant