Строки не кажутся равными в Java на Android, хотя они печатают одинаковые

У меня проблема, я довольно смущен. У меня есть следующие строки кода в приложении для Android:

System.out.println(CurrentNode.getNodeName().toString());
if (CurrentNode.getNodeName().toString() == "start") {
    System.out.println("Yes it does!");
} else {
    System.out.println("No it doesnt");
}

Когда я смотрю вывод первого оператора println, он появляется в LogCat как "start" (без кавычек, очевидно). Но затем, когда выполняется оператор if, он переходит к инструкции else и печатает "Нет, это не так".

Я задавался вопросом, может ли в имени node иметь в нем какой-то непечатаемый символ, поэтому я проверил длину строки, поступающей из getNodeName(), и длиной 5 символов, как вы бы ожидать.

Кто-нибудь понял, что здесь происходит?

Ответы

Ответ 1

Используйте String equals метод сравнения строк. Оператор == будет просто сравнивать ссылки на объекты.

if ( CurrentNode.getNodeName().toString().equals("start") ) {
   ...

Ответ 2

Используйте CurrentNode.getNodeName().toString().equals("start").

В Java одна из самых распространенных ошибок, встречающихся новичками, использует == для сравнения строк. Вы должны помнить, что == сравнивает объект идентификатор (мыслить адреса памяти), а не контент.

Ответ 3

Вам нужно использовать .equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... }