У меня проблемы. Проблема в том, что когда я пытаюсь сравнить 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;
}
}
Спасибо!!!
Для сравнения двух строк u должен использовать метод equals() или equalsIgnoreCase().
в твоем случае:
if(it.next().equals(args[0]))
оператор == возвращает true, если два объекта - один и тот же объект, один и тот же адрес в памяти.
Существует два способа сравнения строк.
В вашем коде вы сравниваете ссылки, ссылающиеся на него it.next() & args[0]
тогда как вы должны сравнить значение двух, используя it.next().equals(args[0])
.
Вы должны использовать метод .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
.
Вы используете.equals при сравнении двух строк. Поэтому используйте
(it.next()).equals(args[0])
если вы используете == для сравнения двух значений int, то это сравнение двух значений, потому что int является примитивным типом данных. Если вы используете "==" для сравнения объекта String, то проверяется, ссылаются ли ссылка на String на тот же объект String или нет. Он не учитывает значения объектов String.
Если вы хотите сравнить значения объектов String, вы должны использовать equals() класса String. Этот метод сравнивает содержимое обоих объектов String.