2016-06-14 2 views
0

Я пытаюсь сравнить текст кнопки, чтобы принять решение о действиях, которые необходимо предпринять в этом приложении для Android, которое я делаю. Я получаю неожиданное поведение, которое я не понимаю.Сравнение текста кнопки Android

clickMeButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (v.getId() == R.id.btnLeft) { 
       Button button = (Button) v; 
       String click = new String("Click me"); 
       String look = new String(button.getText().toString()); 
       Boolean check = new Boolean(look == click); 
       if (button.getText().toString() == "Click me") { 

Переменная проверка возвращает false. Зачем? В отладчике у обоих предметов есть «Click me», который находится рядом с ними. Кнопка, которую я нажимаю в эмуляторе, говорит «Click me» и ее оригинальный текст, «Click me» указан xml.

ответ

5

Это не так, как мы делаем сравнение строк в Java. Попробуйте это

if (button.getText().toString().equals("Click me")) { 

== проверяет, если оба параметра тот же объект, а equals() проверить, если оба параметра имеют одинаковое значение.

1

Если вы сравниваете строковый объект с строковым объектом, это будет нормально. Но вы сравниваете объект с массивом char. Объект никогда не будет == для массива символов. Значение объекта может быть равным, но сравнение объектов возвращает false. Потому что эти 2 переменные не одинаковы. В java лучшая практика сравнения строк - это метод равный.

Boolean check = new Boolean(look == click); // DO NOT 
Boolean check = new Boolean(look.equals(click)); // DO 

Это то же самое для оператора if.

if (button.getText().toString().equals(click)){..} 

Edit: А вот хорошее объяснение How do I compare strings in Java?

Смежные вопросы