Я просматривал декомпилированные исходные коды класса Java SE7 String, в частности метод equalsIgnoreCase, и мне показалась странной следующая строка (выполняется в цикле while, локальные переменные опущены):
if (((c1 = this.value[(o1++)]) != (c2 = target[(o2++)]))
&& (toUpperCase(c1) != toUpperCase(c2))
&& (toLowerCase(c1) != toLowerCase(c2))) {
return false;
}
И мне стало интересно, почему c1 и c2 проверяются на неравноправие как в верхнем, так и в нижнем регистре. Конечно, если бы сравнение в верхнем регистре было равным, нижний регистр никогда бы даже не был достигнут ... из этого, однако, я пришел к выводу, что есть случаи, когда верхний регистр (c1)! = верхний регистр (c2) И символы по-прежнему равны, когда сравнивается в нижнем регистре.
Предложения кто-нибудь?