具有相同值的字符串比较返回false

时间:2019-05-29 03:22:21

标签: java android

enter image description here

我在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);
 }


}

3 个答案:

答案 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),这将返回相同意义的布尔值。