## 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

    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
    }