Сравнение строк возвращает false, хотя они имеют одинаковое значение

Сравнение строк возвращает false, хотя они имеют одинаковое значение

У меня есть строки, хранящиеся в базе данных SQLite, которые отображаются в Activity. проблема в том, что если я сравниваю текст кнопки со строковым значением, оно возвращает false, а equals показывает, что оно совпадает. Мне любопытно узнать, кто возвращает false, хотя они оба одинаковы.

Я пробовал и методы tostring.

while (result.moveToNext()) {

 Button btn = new Button(this);
 btn.setWidth(100);
 btn.setHeight(40);
 //    btn.setSingleLine(); //keep text in single line don't break big words
 //    btn.setAutoSizeTextTypeUniformWithConfiguration(1, 15, 1,
 //          TypedValue.COMPLEX_UNIT_DIP);
 messageReceived = result.getString(1).trim();
 btn.setText(result.getString(1).trim());


 String btnText = btn.getText().toString().trim();


 String Value = Boolean.toString(btnText == messageReceived);
 Toast toast = Toast.makeText(this, Value, Toast.LENGTH_LONG);
 toast.setGravity(Gravity.CENTER, 5, 5);
 toast.show();

 if (messageReceived.equals(btnText)) {
  Toast toast2 = Toast.makeText(this, "matched", Toast.LENGTH_LONG);
  toast2.setGravity(Gravity.LEFT, 0, 0);
  toast2.show();
 } else {
  Toast toast2 = Toast.makeText(this, "Not Matched", Toast.LENGTH_LONG);
  toast2.setGravity(Gravity.LEFT, 0, 0);
  toast2.show();
 }


 Toast.makeText(this, "A: " + btn.getText() + " B: " + messageReceived, Toast.LENGTH_LONG).show();

 btn.setOnClickListener(this);
 grid.addView(btn);

 //messageReceived = "pungi";

 if (btnText == messageReceived) {
  btn.setBackgroundColor(Color.YELLOW);
 }


}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
436
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Эта строка btnText==messageReceived всегда будет возвращать false, так как обе не указывают на один и тот же объект.

Метод equals соответствует содержимому, где оператор as == соответствует объекту, указывающему на тот же адрес. Прочитайте этот документ, чтобы узнать больше о == и equals. == против равных

Надеюсь, это поможет вам

Ответ принят как подходящий

Вероятно, потому что == сравнивает адреса, когда равные сравнивает содержимое пример

String s1 = new String("sd"); 
String s2 = new String("sd");
System.out.println(s1 == s2); 
System.out.println(s1.equals(s2));

Первый возвращает false, когда второй возвращает true

О, это хорошо. Boolean.toString(stringA == stringB) фактически выполняет эталонное сравнение; то есть проверка, указывают ли оба объекта на одно и то же место в памяти. String.equals(), с другой стороны, сравнивает значения.

String A = new String("five");
String B = new String("five");

System.out.println(Boolean.toString(A == B)); // false.

System.out.println(Boolean.toString(A.equals(B))); // true

Кроме того, Boolean.toString(A.equals(B)) можно заменить на A.equals(B), что вернет логическое значение в том же смысле.

Другие вопросы по теме