-2

我有一个 Vertex 类型的 ArrayList。Vertex 是我自己的类,它只包含一个 String 类型的数据成员。它有一个成员函数 getName(),它返回顶点的名称。如果给出了特定的字符串,我想获得 ArrayList 中的位置。我写了下面的代码来做到这一点。但它总是返回-1,即初始值。我的代码有什么问题?

    public int map(String vname)
    {
        int pos=-1;
        for(int i=0;i<nodes.size();i++)
        {
            if(nodes.get(i).getName()==vname)
            {
                pos=i;
                break;  
            }
        }
        return pos;
    }

在上面的代码中,nodes 是一个 Vertex 类型的 ArrayList。

4

5 回答 5

4

在 Java==中用于对象相等,string1.equals(string2)用于字符串相等

于 2013-05-24T06:18:14.317 回答
4

使用String#equals :nodes.get(i).getName().equals(vname)代替。==在Java中比较字符串的地址。

于 2013-05-24T06:19:07.720 回答
4

== 比较参考而不是内容。

如果大小写很重要,请使用String#equals() ,否则使用String#equalsIgnoreCase()

于 2013-05-24T06:20:06.743 回答
2

将其替换为

if(nodes.get(i).getName()==vname)

if(nodes.get(i).getName().equals(vname))

用于比较字符串和大小写以及比较不使用大小写的 vname

if(nodes.get(i).getName().equalsIgnoreCase(vname))
于 2013-05-24T06:33:04.193 回答
2

String的比较是错误的...

if(nodes.get(i).getName()==vname)

应该

if(nodes.get(i).getName().equals(vname))
于 2013-05-24T06:18:10.967 回答