03:37

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
А знаете ли Вы, что вот эти две строчки не взаимозаменяемы?

if (siteName.toUpperCase().equals("DIARY.RU";))
if (siteName.toLowerCase().equals("diary.ru";))


бывают случаи, когда эти if-ы ветвятся по-разному для одного и того же значения переменной siteName типа String

@темы: Java, отлично замаскированные грабли

Комментарии
25.04.2015 в 09:51

меняю пропорции мира в сторону розовых пони
Есть буквы, которые при таком преобразовании исчезают вовсе?
25.04.2015 в 12:22

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
нет, количество букв не меняется.
но преобразование toUpperCase / toLowerCase в некоторых случаях может вас удивить. я бы даже сказал шокировать.
говорят, это давно и широко известная вещь, но я узнал только недавно
люди в реальных проектах натыкались на эти грабли
25.04.2015 в 12:38

меняю пропорции мира в сторону розовых пони
CD_Eater, ок... Не исчезнуть, но превратиться в латинскую букву?
25.04.2015 в 12:52

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
да, дело в том, во что она превратится )))
25.04.2015 в 13:11

меняю пропорции мира в сторону розовых пони
CD_Eater, дай уже конкретику! )))
25.04.2015 в 13:56

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
подождём немного, может сюда заглянет знающий человек и продемонстрирует свою эрудицию ;)
25.04.2015 в 15:12

бинарный романтик
Бывает. Если строка содержит лигатуру или символы, у которых нет точного соответствия в ином регистре. То есть лигатура при апперкейсе может вдруг стать двумя символами Юникода из одного. Или тремя. И вообще есть еще много нюансов. В латинице строчный вариант I - это i, и наоборот, но в каких-то языках, использующих латинницу, это не так. Ну то есть I при ловеркейсе не даст i, а i при апперкейсе не даст I. Как-то так. Языки не упомню, давно читал про это.
25.04.2015 в 16:24

меняю пропорции мира в сторону розовых пони
Dark Dragon, чтобы получилось так как тут показано, какой-то символ должен при аппекрейсе дать латинскую букву!
ИЛи дать отсутствие буквы.
25.04.2015 в 17:00

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
Dark Dragon, да, проблема именно с буквой i в турецкой локали.
У них 2 буквы i - одна с точкой, другая без, и к ним есть соответствующие заглавные (тоже одна с точкой, другая без).
Upper İ (U+0130) I (U+0049)
Lower i (U+0069) ı (U+0131)
А всё из-за того, что toUpperCase() по умолчанию использует текущую локаль ОС.