Строки не кажутся равными в Java на Android, хотя они печатают одинаково - PullRequest
14 голосов
/ 24 апреля 2010

У меня есть проблема, из-за которой я запутался. У меня есть следующие строки кода в моем приложении для 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 как «начало» (без кавычек, очевидно). Но затем, когда оператор if выполняется, он переходит к оператору else и печатает «Нет, это не так».

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

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

Ответы [ 3 ]

44 голосов
/ 24 апреля 2010

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

if ( CurrentNode.getNodeName().toString().equals("start") ) {
   ...
13 голосов
/ 24 апреля 2010

Использование CurrentNode.getNodeName().toString().equals("start").

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

7 голосов
/ 24 апреля 2010

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

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