问题
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.
回答1:
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....
回答2:
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.
来源:https://stackoverflow.com/questions/44238749/equalsignorecase-not-working-as-intended