为什么我的函数总是返回false,即使它之前发现返回true?

时间:2014-11-08 02:42:28

标签: java return

public boolean contains(Object data)
{
    Node temp = new Node(data);
    Node current = head.getNext();

    for(int i = 0; i < size(); i++)
    {
        //System.out.println(current.getData());
        if(temp.getData() == current.getData())
        {
            System.out.println("true");
            return true;
        }
        else
        {
            current = current.getNext();
        }
    }
    return false;
}

我的代码在上面,无论如何都会返回false。如果它找到一个真实的条件,它打印“true”,它仍然返回false。我在这做错了什么?我有完全相同的功能,除了它返回一个整数而不是布尔值,它使用相同的方法/代码完全正常.4

我的功能也是如此,并且工作正常:

public int indexOf(Object data)
{
    Node temp = new Node(data);
    Node current = head.getNext();

    for(int i = 0; i < size(); i++)
    {
        if(temp.getData() == current.getData())
        {
            return i;
        }
        current = current.getNext();
    }

    return -1;
}

1 个答案:

答案 0 :(得分:2)

您对此表达式有疑问:

if(temp.getData() == current.getData())

您的数据由Object表示非常糟糕 - 真的应该是参数化类型*。但是,由于您正在使用==,因此您需要检查对象是否是相同的实例,而不是它们是否相同。

将您的比较更改为使用.equals

if(temp.getData().equals(current.getData())

*:如果您想知道,您将Node更改为Node<T>,请将您的链接列表实例更改为LinkedList<Node<T>>,然后更改contains的方法参数为public boolean contains(T data)