为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2022-12-21 12:05:05
我在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); }}
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

这可能是因为 == 比较地址时相等比较内容示例


String s1 = new String("sd"); 

String s2 = new String("sd");

System.out.println(s1 == s2); 

System.out.println(s1.equals(s2));

当第二个返回 true 时,第一个返回 false


查看完整回答
反对 回复 2022-12-21
?
四季花海

TA贡献1811条经验 获得超5个赞

哦,这是一个很好的。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

此外, theBoolean.toString(A.equals(B))可以替换为A.equals(B),这将返回相同意义上的布尔值。


查看完整回答
反对 回复 2022-12-21
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

此行将btnText==messageReceived始终返回 false,因为两者都没有指向同一个对象。

equals 方法匹配内容,其中 as == 运算符匹配指向同一地址的对象。阅读本文档以了解有关 == 和 equals 的更多信息。 == 与等于

希望这对你有帮助


查看完整回答
反对 回复 2022-12-21
  • 3 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号