字符串比较时错误的结果

时间:2014-09-28 20:36:42

标签: java string comparison

我有点麻烦。问题是当我试图比较2个字符串(类型字符串)时,运算符'=='返回FALSE,但实际上字符串是相等的。 这是代码及其问题:

//before the following code I filled the "LinkedList <String> command" and there is
//a node with value of args[0]
String deal="";
Iterator it = commands.listIterator();
if(it.hasNext() == true)
{
    if(it.next() == args[0])
    {
        deal += it.next();
        it.hasNext();
        break;
    }
}

谢谢!!!

5 个答案:

答案 0 :(得分:1)

比较两个字符串时使用.equals。所以使用

(it.next()).equals(args[0])

答案 1 :(得分:1)

要比较两个字符串,你应该使用方法equals()或equalsIgnoreCase()。

在你的情况下:

if(it.next().equals(args[0]))

如果两个对象是同一个对象,内存中的地址相同,则operator ==返回true。

答案 2 :(得分:1)

您必须使用.equals方法:

String deal="";
Iterator it = commands.listIterator();
if(it.hasNext() == true)
{
    String next = it.next();
    if(next.equals(args[0]))
    {
        deal += next;
        break;
    }
}

注意,.next()返回一次值并将其内部光标移动到下一个值。

==无法用于String,因为如果两侧都有相同的对象实例,则==为真。相同的字符串内容可以在许多String个实例中。

答案 3 :(得分:1)

有两种比较字符串的方法。

  1. 比较字符串的值(使用.equals实现)。
  2. 比较实际对象(使用==运算符实现)。
  3. 在您的代码中,您正在比较it.next() & args[0]引用的引用,而您应该使用it.next().equals(args[0])来比较两者的值。

答案 4 :(得分:0)

如果使用==来比较两个int值,那么它将比较这两个值,因为int是原始数据类型。如果使用“==”比较String对象,则检查两个String引用是否都引用相同的String对象。它不考虑String对象的值。

如果要比较String对象的值,则必须使用String类的equals()。此方法比较两个String对象的内容。