8
votes

When i run the following program it prints only

equals says they are equal

However From equalsIgnoreCase docs in java 8 we have :

Two characters c1 and c2 are considered the same ignoring case if at least one of the following is true:
• Applying the method java.lang.Character.toUpperCase(char) to each character produces the same result

    public class Test {
    public static void main(String[] args) {

        String string1 = "abc\u00DF";
        String string2 = string1.toUpperCase();

        if (string1.equalsIgnoreCase(string2))
            System.out.println("equalsIgnoreCase says they are equal");

        if (string1.toUpperCase().equals(string2.toUpperCase()))
            System.out.println("equals says they are equal");

    }
}

So my question is why this program is not printing

equalsIgnoreCase says they are equal

As in both operations upper case charcters are used.

2
string 1: abcß string 2: ABCSS, always print intermediary steps or use debugger to see values - Christophe Roussy

2 Answers

11
votes

You are using/comparing the german ß sign, its uppercase produce SS... so you need to use the Locale.German

if (string1.toUpperCase(Locale.GERMAN).equals(string2.toUpperCase(Locale.GERMAN)))

that will return true....

0
votes

Yes, its correct.

if (string1.equalsIgnoreCase(string2)) ....

ignores the lower and uppercase of string1 and string2.

if (string1.equals(string2)) ....

will detect, that there are different letters and does not print ..they are equal. Your second example with the uppercase conversion is OK too.