#java
#java
Вопрос:
Я разрабатываю небольшое приложение на Java. Следующее условие if никогда не становится истинным, знает ли какое-либо тело действительную причину?
public int foo()
{
String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
return 5;
else
return 6;
}
Он всегда возвращает 6. Я запустил ее в режиме отладки и увидел, что обе строки содержат одинаковое значение.
Я также попытался поменять местами позиции обеих строк, например:
MyCustomObject.sTitle.equalsIgnoreCase(sTitle)
но это тоже не сработало.
Комментарии:
1. Опубликуйте код, который присваивает значения
MyCustomObject.sTitle
.2. Вы должны опубликовать здесь код, который вы действительно пробовали и который не работает. Это даже не будет скомпилировано. Добавьте присваивание для
MyCustomObject.sTitle
в то же место, что иsTitle
, и посмотрите, не работает ли оно по-прежнему.3. Попробуйте вставить это перед своим if и сообщите нам результат: system.out.println(sTitle «~» MyCustomObject. sTitle «=» sTitle.equalsIgnoreCase(MyCustomObject. Стиль));
4. Попробуйте обрезать каждую строку, возможно, у вас есть лишние пробелы в начале или конце.
5. Хотя это приятная мечта, что обе строки имеют одинаковое значение, похоже, что Java с вами не согласна. рассмотрим детали. Если MyCustomObject. В конце строки есть null, тогда это никоим образом не то же самое, что «title», потому что «title» != «title 0»
Ответ №1:
Фактическая причина заключается в том, что MyCustomObject.sTitle
не имеет значения «title» или каких-либо вариантов регистра.
Проверьте, где и когда назначена эта переменная.
Комментарии:
1. Я четко написал, что обе строки имеют одинаковое значение. Нет необходимости проверять, откуда берется это значение, я просто ставлю точку останова над условием if и навожу указатель мыши на обе строки и обнаружил, что обе имеют одинаковые значения даже с одинаковым регистром
2. @Jame либо значения отличаются, либо вы публикуете не совсем то, что делаете.
3. @Jame можете ли вы скопировать / вставить значение, которое вы видите в отладчике? Это может выглядеть как ‘title’, но на самом деле это не так.
4. @srkavin: Я тоже уже проверил эту вещь, ничего подобного нет
5. @Jonathon: Я не могу вставить фактический код из-за проблем с безопасностью, извините за это. Но я пытаюсь разобраться в проблеме, в начале строки есть пробел. Извините за отрицательный голос, я буду голосовать за это сейчас спасибо
Ответ №2:
Я предполагаю, что MyCustomObject.sTitle
это тоже строка.
Моей первой попыткой отладки было бы добавить следующую строку перед проверкой равенства: System.out.println("*" MyCustomObject.sTitle "*");
и проверить наличие пробелов.
Ответ №3:
Попробуйте добавить этот код в метод foo:
if (sTitle.length() != MyCustomObject.sTitle.length())
{
System.out.println("I hate the truth");
}
else
{
System.out.println("The mystery remains!");
}
Ответ №4:
Метод equalsIgnoreCase равного значения
Сравнивает эту строку с другой строкой, игнорируя соображения регистра. Две строки считаются равными, игнорируя регистр, если они имеют одинаковую длину, и соответствующие символы в двух строках равны, игнорируя регистр. Два символа c1 и c2 считаются одинаковыми, игнорируя регистр, если хотя бы один из следующих символов верен:
Два символа одинаковы (по сравнению с помощью оператора == ). Применение метода Character.toUpperCase(char) к каждому символу приводит к одному и тому же результату. Применяем метод Character.Добавление нижнего регистра (char) к каждому символу приводит к одному и тому же результату.
На основе приведенного выше значения MyCustomObject.Шаблон не соответствует ни одному из вышеуказанных критериев.
Ответ №5:
как и предыдущие авторы, был написан MyCustomObject.sTitle не возвращает ни одного варианта «title». Вы могли бы попробовать запустить этот фрагмент кода, и вы сможете сами доказать, что это не метод equalsIgnoreCase, который не работает.
public static void main(String[] args) {
System.out.println(foo());
}
public static int foo()
{
String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
return 5;
else
return 6;
}
public static class MyCustomObject {
public static String sTitle = "TITLE";
}