[英]Java Equality not Behaving as Expected
我当前正在使用使用SimpleListAdapter的子类绑定ListActivity的android应用程序。 适配器绑定到的List<HashMap<String, Object>>
的类型为List<HashMap<String, Object>>
。
我必须遵循适配器列表中的If语句...
if (dataRow.get("HasLineup1").toString()) == "0")
这从不计算true
对我来说,即使在Eclipse调试器说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背景,我无法终生确定自己做错了什么。
==
运算符将实例存储位置与非原始类型进行比较,因此除非操作数的两侧是同一实例,否则此操作将失败。 每当处理非基本类型时,请使用equals
代替==
。
如果您使用的是string
,则应使用equals
方法。
if (dataRow.get("HasLineup1").toString())equals("0"))
等于运算符 ==
将根据您比较的内容执行以下操作 :
int
, char
,...):检查它们的值是否相同。 换句话说,对于非基元==
并不意味着语义。 您需要使用equals
方法。 它在Object
上定义,因此将始终可用。 但是其语义取决于特定类如何(以及是否)决定覆盖此方法。
对于String,这是与方法的参数的逐字符比较。
这是有关==和equals之间差异的参考链接。 ==比较引用,而equals()比较值。
http://leepoint.net/notes-java/data/expressions/22compareobjects.html
采用
if (dataRow.get("HasLineup1").toString()).equals("0"))
==
(双精度等于)仅比较对象以查看它们是否指向内存中的同一位置。 equals
方法实际上将两个字符串中的字符相互比较。
在使用“ ==”之前,必须在两个字符串上都使用方法“ equals”或调用.internal()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.