我们正在研究泛型,它要求我们有一个AnyType数组(驱动程序实现一个字符串数组然后整数)。其中一个函数是一个名为'remove'的布尔函数,它找到'x'并将其删除,然后返回true。它没有找到和删除字符串的问题,但似乎无法找到整数。这是为什么?
代码是
public boolean remove(AnyType x)
{
for(int i = 0; i < length; i++)
{
if(arr[i] == x)
{
for(int j = i; j < length - 1; j++)
{
arr[j] = arr[j + 1];
}
length--;
return true;
}
}
return false;
}
答案 0 :(得分:0)
用户hoaz的答案解决了这个问题。使用.equals而不是==是问题。固定代码看起来像这样
public boolean remove(AnyType x)
{
for(int i = 0; i < length; i++)
{
if(arr[i].equals(x))
{
for(int j = i; j < length - 1; j++)
{
arr[j] = arr[j + 1];
}
length--;
return true;
}
}
return false;
}
答案 1 :(得分:-1)
这个问题已经解决了,但我想提供更多信息。
此问题的原因是使用==
来比较而不是.equals
。这是一个问题,因为==
相等运算符基于内存引用进行比较,因此例如1 == 1
为真,因为1
是存储在内存中的一个位置然后根据需要引用的基元,而两个对象只有在它们是对象的完全相同的实例时才会返回true。
.equals
是一种经常从Object
重写以将对象的字段与彼此进行比较的方法,如果不重写,则会回退到使用==
,所以它几乎总是比较的优选方法。