2012-02-09 3 views
0

Вот суть моего проблемного кода:Почему не extra.getString() == «редактировать», а extra.getInt() == 1 работает?

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.

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

Спасибо.

ответ

1

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

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

Это было так давно я взял любой Java классы. равнозначно перешел мне в голову, но затем исчез. Спасибо за пример. – spuppett

+0

Исходя из фона C#, я просто ударил головой по моему столу не 3 часа назад по этой самой проблеме, одновременно злоупотребляя своим дроидом. –

+0

Просто FYI: Используйте https://github.com/beplaya/Wagon для своих дополнительных услуг. Путь проще. – beplaya

2

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

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

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

0

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

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

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

0

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