我目前正在开发一个Android应用程序,它使用SimpleListAdapter的子类来绑定ListActivity。适配器绑定的列表的类型为List<HashMap<String, Object>>
。
我必须在列表适配器...
中跟随If语句if (dataRow.get("HasLineup1").toString()) == "0")
即使Eclipse调试器在检查窗口中显示true
等于dataRow.get("HasLineup1").toString()
,这也永远不会评估为"0"
。
数据列表是使用行
从XML源填充的Game.put("HasLineup1", attributes.getNamedItem("home_lineup").getNodeValue());
我设法通过将If语句更改为
来解决此问题if (Integer.parseInt(dataRow.get("HasLineup1").toString()) == 0)
有人可以向我解释为什么我使用的第一个If语句不起作用? Java不是我的母语,但我不能因为我的生活而根据我的.Net背景弄清楚我做错了什么。
答案 0 :(得分:4)
==
运算符比较非基本类型的实例内存位置,因此除非操作数的两边是同一个实例,否则会失败。每当处理非原始类型时,请使用equals
而不是==
。
答案 1 :(得分:2)
如果您使用string
,则应使用equals
方法执行此操作。
if (dataRow.get("HasLineup1").toString())equals("0"))
答案 2 :(得分:2)
根据您所比较的内容,等式运算符 ==
将执行以下操作:
int
,char
,...):检查它们的值是否相同。换句话说,对于非原语==
并不意味着语义。你需要equals
方法。它在Object
上定义,因此它始终可用。但它的语义取决于特定类如何(以及如果)决定覆盖此方法。
对于String,它是与方法参数的逐字符比较。
答案 3 :(得分:1)
这是一个链接,其中包含有关==和equals之间差异的参考资料。 ==比较引用,而equals()比较值。
http://leepoint.net/notes-java/data/expressions/22compareobjects.html
答案 4 :(得分:0)
使用
if (dataRow.get("HasLineup1").toString()).equals("0"))
==
(double equals)仅比较对象以查看它们是否指向内存中的相同位置。 equals
方法实际上将两个字符串中的字符相互比较。
答案 5 :(得分:0)
在使用“==”之前,您必须在两个字符串上使用方法“equals”或调用.internal()。