Java平等不符合预期

时间:2011-11-03 16:26:15

标签: java android

我目前正在开发一个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背景弄清楚我做错了什么。

6 个答案:

答案 0 :(得分:4)

==运算符比较非基本类型的实例内存位置,因此除非操作数的两边是同一个实例,否则会失败。每当处理非原始类型时,请使用equals而不是==

答案 1 :(得分:2)

如果您使用string,则应使用equals方法执行此操作。

if (dataRow.get("HasLineup1").toString())equals("0"))

答案 2 :(得分:2)

根据您所比较的内容,等式运算符 ==将执行以下操作:

  • 两种原始类型(例如intchar,...):检查它们的值是否相同。
  • 两个非基本类型(类实例):检查比较的引用是否指向内存中的同一对象。

换句话说,对于非原语==并不意味着语义。你需要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()。

相关问题