我在SQLite
数据库中存储了字符串,这些字符串显示在Activity
中。问题是,如果我将按钮的文本与字符串值进行比较,则它在返回等于false时返回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);
}
}
答案 0 :(得分:4)
可能是因为==比较相等时比较地址 例子
String s1 = new String("sd");
String s2 = new String("sd");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
第一次返回false,第二次返回true
答案 1 :(得分:1)
此行btnText==messageReceived
将始终返回false,因为两者均未指向同一对象。
equals方法匹配内容,其中==运算符匹配指向相同地址的对象。 阅读此文档以了解有关==和equals的更多信息。 == vs equals
希望这对您有帮助
答案 2 :(得分:1)
哦,这是一个好人。 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)
,这将返回相同意义的布尔值。