Неправильные результаты при сравнении строк [дубликаты]

1

У меня проблемы. Проблема в том, что когда я пытаюсь сравнить 2 строки (тип String), оператор '==' возвращает FALSE, но на самом деле строки равны. Здесь код с его проблемой:

//before the following code I filled the "LinkedList <String> command" and there is
//a node with value of args[0]
String deal="";
Iterator it = commands.listIterator();
if(it.hasNext() == true)
{
    if(it.next() == args[0])
    {
        deal += it.next();
        it.hasNext();
        break;
    }
}

Спасибо!!!

Теги:
string
comparison

5 ответов

1
Лучший ответ

Для сравнения двух строк u должен использовать метод equals() или equalsIgnoreCase().

в твоем случае:

if(it.next().equals(args[0]))

оператор == возвращает true, если два объекта - один и тот же объект, один и тот же адрес в памяти.

  • 0
    Это не скомпилируется, вы забыли "." между следующим () и равно
  • 0
    Ооо да! Большое спасибо. Как я мог забыть это ... Конечно, наш преподаватель сказал нам о равных (...)
Показать ещё 2 комментария
1

Существует два способа сравнения строк.

  1. Сравнение значения строк (достигнутых с использованием.equals).
  2. Сравнение фактического объекта (достигнутого с помощью оператора ==).

В вашем коде вы сравниваете ссылки, ссылающиеся на него it.next() & args[0] тогда как вы должны сравнить значение двух, используя it.next().equals(args[0]).

1

Вы должны использовать метод .equals:

String deal="";
Iterator it = commands.listIterator();
if(it.hasNext() == true)
{
    String next = it.next();
    if(next.equals(args[0]))
    {
        deal += next;
        break;
    }
}

Будьте осторожны. .next() возвращает значение один раз и переводит свой внутренний курсор на следующее значение.

== не может использоваться для String потому что значение == истинно, если один и тот же экземпляр объекта находится с обеих сторон. Такое же строковое содержимое может быть во многих экземплярах String.

  • 0
    Большое спасибо. Я просто забыл это, потому что я делал программы на C / C ++ =)
  • 0
    Круто, можешь проголосовать и принять мой подробный ответ :)
1

Вы используете.equals при сравнении двух строк. Поэтому используйте

(it.next()).equals(args[0])
  • 0
    Какой я дурачок. Проблема в том, что я обычно использую C / C ++ =)
0

если вы используете == для сравнения двух значений int, то это сравнение двух значений, потому что int является примитивным типом данных. Если вы используете "==" для сравнения объекта String, то проверяется, ссылаются ли ссылка на String на тот же объект String или нет. Он не учитывает значения объектов String.

Если вы хотите сравнить значения объектов String, вы должны использовать equals() класса String. Этот метод сравнивает содержимое обоих объектов String.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню