为什么我的删除函数会找到字符串而不是整数?

时间:2018-01-18 20:16:58

标签: java generics

我们正在研究泛型,它要求我们有一个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;
}

2 个答案:

答案 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重写以将对象的字段与彼此进行比较的方法,如果不重写,则会回退到使用==,所以它几乎总是比较的优选方法。

更多信息:What is the difference between == vs equals() in Java?