繁体   English   中英

Java平等行为不符合预期

[英]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"))

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

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

换句话说,对于非基元==并不意味着语义。 您需要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM