2014-09-22 69 views
0

我有两个包含HashMap与字符串和整数和他们都携带“20”和20 当我尝试使用的toString()我总是得到不平等对它们进行比较:比较两个HashMap的Integer和String

HashMap<String, String> vals = HashMap<String, String>(); 
HashMap<Integer, Integer> nums = HashMap<Integer, Integer>(); 

if(nums.get(id).toString() == vals.get("num")) { 
    Log.i(TAG, "DataBase.updateOrder(): number is the same"); 
} else { 
    Log.i(TAG, "DataBase.updateOrder(): number has changed"); 
} 

当我使用Integer.valueOf()为字符串的HashMap它工作得很好,他们是平等的:

if(nums.get(id) == Integer.valueOf(vals.get("num")))

,当然还有以下记录好好尝试在所有的工作中,我需要的方式:

num.get(id).equals(vals.get("num"))

所以问题是为什么我的第一个代码不工作(如我所料)?

+0

你对散列表的每个条目使用了相同的密钥吗? – Blackbelt 2014-09-22 10:48:56

+0

其实没有。 nums只保留记录的ID,vals保存一个记录的值,包括其在“num”键下的ID。 – kolyaseg 2014-09-22 11:06:49

回答

0

在您的比较字符串中使用此.equals

if(nums.get(id).toString().equals(vals.get("num"))) { 
    Log.i(TAG, "DataBase.updateOrder(): number is the same"); 
} 
+0

哦!没想到) – kolyaseg 2014-09-22 11:21:36

0

,你可以,如果你解析字符串为int比较,那么你有一个整数比较,而不是一个字符串比较:

0

嗯,这是相当简单: 比较时,由“==”比较对象在内存中的位置。如果你想确保“==” 做的是正确的事情,你需要以某种方式指向另一方(不是完美的说法)。另一方面,等于试图计算对象内容的比较。 更多关于我刚刚在下面的链接中解释的内容。
http://www.programmerinterview.com/index.php/java-questions/java-whats-the-difference-between-equals-and/
如果你想了解更多关于如何在你的课上实现你自己的平等的信息,请阅读这里。
http://tutorials.jenkov.com/java-collections/hashcode-equals.html
我希望我回答你的问题。