为什么CaseInsensitiveComparator不进行大小写比较



我正在查看CaseInsensiveComparator的代码,但无法理解下面的代码

               if (c1 != c2) {
                c1 = Character.toUpperCase(c1);
                c2 = Character.toUpperCase(c2);
                if (c1 != c2) {
                    c1 = Character.toLowerCase(c1);
                    c2 = Character.toLowerCase(c2);
                    if (c1 != c2) {
                        // No overflow because of numeric promotion
                        return c1 - c2;
                    }
                }
            }

比较大小写形式的字符的目的是什么?其中一个还不够吗?我们是否怀疑某些字符在小写时可以相等,但在大写时不相等?

来自Unicode标准:

此外,由于自然语言的变幻莫测两个不同的Unicode字符相同的情况大写或小写

因此,有时你会发现字母的小写字母是相同的,但大写字母不同,因此进行比较。

还要检查来源,上面写着:

不幸的是,转换为大写无法正常工作格鲁吉亚字母表的大小写规则很奇怪转变所以我们需要在离开前做最后一次检查。

最新更新