Почему extra.getString () == «редактировать» не работает, а extra.getInt () == 1 работает? - PullRequest
0 голосов
/ 09 февраля 2012

Вот суть моей проблемы:

String from = extra.getString("from");
Log.d("Cat", from);  //debugs as edit
if(from == "edit") {
  Log.d("Cat", "Edit");
} else {
  Log.d("Cat", "Not Edit");
}

Это будет "Не редактировать"

В вызове я имею

cIntent.putExtra("from", "edit");
startActivity(cIntent);

Я изменил все это до getInt и передал 1, он отлаживается как Edit, а если передан 2, отладка как Not Edit.

Я не понимаю, что происходит.Я могу жить с этим, если мне нужно, но я чувствую, что мне здесь не хватает чего-то очень простого.

Спасибо.

Ответы [ 4 ]

1 голос
/ 09 февраля 2012

Используйте метод equals:

if(from.equals("edit")) {
  Log.d("Cat", "Edit");
} else {
  Log.d("Cat", "Not Edit");
}
1 голос
/ 09 февраля 2012

В Java вам нужно сравнить строки следующим образом:

if(from.equal ( "edit") ) 
{
  Log.d("Cat", "Edit");
} 
else 
{
  Log.d("Cat", "Not Edit");
}

"==" используется для сравнения объектов, а не значений.

0 голосов
/ 09 февраля 2012

Вы должны использовать str.equalsIgnoreCase(String s) при сравнении строк, потому что метод equals в основном используется для сравнения объектов, а в некоторых случаях он не может сравнивать две абсолютно одинаковые строки, как это должно

0 голосов
/ 09 февраля 2012

В Java, когда вы сравниваете с помощью ==, он сравнивает ссылочный идентификатор (указатель) между объектами.В случае числового объекта, такого как int, его значением является id.Однако с помощью String две идентичные строки могут иметь разные идентификаторы.Поэтому, когда вы сравниваете их, используя ==, он возвращает false, поскольку это другой объект.

Если вы используете firstString.equal (secondString) , это будет принимать значение этой строкии сравните, используя это.

Надеюсь, что это ответ на ваш вопрос, короче говоря, никогда не сравнивайте строку, используя ==.

...