У меня есть строки, хранящиеся в базе данных 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);
}
}
Эта строка 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)
, что вернет логическое значение в том же смысле.