我创建了一个哈希映射,其中每个条目对应3个值 关键对象值(数量为两个)
我创建了一个类,我的对象创建并将结果存储在哈希映射中 这是我下面的代码,其中我将输入数据与哈希映射中的先前值进行比较。如果相同的数据出现,那么我只是递增该数据的计数器。我已经在for循环中获取了print语句。虽然这两个字符串匹配但仍然我的代码永远不会出现在if循环中以增加计数器。为什么?
for(i=1;i<=hMap.size();i++)
{
String skey = Integer.toString(i);
if(hMap.get(skey).olddata==comingdata)
{
hMap.get(skey).counter= hMap.get(skey).counter+1;
}
}
答案 0 :(得分:2)
您没有提供足够的有关所涉及类型的信息,但是,我强烈怀疑这是问题所在:
if(hMap.get(skey).olddata==comingdata)
如果olddata
和comingdata
是某种类型的引用,那将是比较引用而不是相等。 (编辑:通过它的声音,它们是字符串引用。)
我的猜测是你想要的:
String skey = Integer.toString(i);
if(hMap.get(skey).olddata.equals(comingdata))
{
hMap.get(skey).counter= hMap.get(skey).counter+1;
}
或者更有效率,避免无意义的查找:
WhateverType value = hMap.get(Integer.toString(i));
if (value.olddata.equals(comingdata))
{
value.counter++;
}
我还建议如果你总是要用整数查找,为什么不使用Integer
键而不是总是将整数转换成字符串呢?
此外,值得遵循Java命名约定,如果它们尚未存在,则应将字段设为私有。
如果这些都没有帮助,请发布更多代码。问题出现在HashMap
而不是代码中的可能性非常小。
答案 1 :(得分:1)
除非您试图查看它们是否具有相同的参考值,否则不要将对象与Java中的==
进行比较。
if (hMap.get(skey).olddata.equals(comingdata)) {
...
你也不应该像这样暴露olddata
;它应该通过吸气剂提供;例如getOldData()
答案 2 :(得分:1)
不清楚olddata
的类型,但也许您应该使用equals()
比较值:
if (hMap.get(skey).olddata.equals(comingdata))
在Java中,==
用于比较相等的原始数据类型或比较 identity 的对象类型。如果需要比较 equality 的两个对象类型,那么必须使用equals()
方法,该方法是为所有对象定义的,因为它是从Object
类继承而来的您还必须覆盖类中的equals()
和hashCode()
,为该类提供有意义的实现。
答案 3 :(得分:0)
应该是
if(hMap.get(skey).olddata.equals(comingdata))
答案 4 :(得分:0)
你的意思是comingdata.equals(hMap.get(skey).olddata)
吗?此外,请注意equals(Object)
和hashCode()
必须相互关联。