我在Android上的ArrayList遇到了一个奇怪的问题
如果我这样做
for(int kk=0;kk<mReadRowIds.size();kk++)
{
if(mRealRowId==mReadRowIds.get(kk))
{
if(kk<mRowNumTimes.size())
{
mArrayNumberPortions.add(mRowNumTimes.get(kk));
bFoundIt=true;
break;
}
else
{
break;
}
}
}
找不到该项目,但如果我这样做
int readrowidforcmp;
for(int kk=0;kk<mReadRowIds.size();kk++)
{
readrowidforcmp = mReadRowIds.get(kk);
if(mRealRowId==readrowidforcmp)
{
if(kk<mRowNumTimes.size())
{
mArrayNumberPortions.add(mRowNumTimes.get(kk));
bFoundIt=true;
break;
}
else
{
break;
}
}
}
该项目被发现,有人可以解释这些对我的区别是什么,因为我没有线索。注意:阵列必须超过200个项目才能出错。
答案 0 :(得分:1)
看起来可能在调用ArrayList的get(index)
方法时,它会返回一个通用对象。在第一个示例中,您将整数与该泛型对象进行比较,但在第二个示例中,您将通用对象转换为整数(通过赋值),然后比较它们。
答案 1 :(得分:1)
它看起来像一个典型的自动拳击问题。在您的第一个解决方案中,您编写了“mRealRowId == mReadRowIds.get(kk)”。 ArrayList中的值作为Integer返回,并与int自动转换为Integer进行比较。通过将值与==进行比较,您正在执行身份比较。诀窍是在-128和127之间存在一个Integer值的缓存,这就是为什么你的代码开始在200左右突破。
一个简单的解决方案是确保你只使用整数,而不是像你的第二个解决方案那样使用整数。