0

创建了一个 ArrayList 并填充了它的插槽:

ArrayList<String> tempTable = new ArrayList<String>();

tempTable.add("1");
tempTable.add("12");
tempTable.add("2");
tempTable.add("11");
tempTable.add("5");

现在,我想替换一些值,所以创造了条件:

for (int i = 0; i < tempTable.size(); i++)
{
    if (tempTable.get(i) == "11")
    {
        tempTable.set(i, "1st FBS");
    }
    else if (tempTable.get(i) == "12")
    {
        tempTable.set(i, "2nd FBS");
    }
    else if (tempTable.get(i) == "13")
    {
        tempTable.set(i, "3rd FBS");
    }
    else
    {
        // leave as is
    }
}

当我运行它时,我得到原始值不变,所以它打印 1, 12, 2, 11, 5 而不是替换 11 和 12。用 ArrayList 做了一个测试,它工作了,但在这种情况下,我不能让它像我希望的那样工作。

任何提示我的代码可能有什么问题?

4

2 回答 2

4

使用字符串 equals() 而不是 == 进行字符串比较。As equals 比较内容,而 == 检查引用是否指向相同的内存位置。

您的代码应如下所示:

for (int i = 0; i < tempTable.size(); i++)
{
    if ("11".equals(tempTable.get(i)))
    {
        tempTable.set(i, "1st FBS");
    }
    else if ("12".equals(tempTable.get(i)))
    {
        tempTable.set(i, "2nd FBS");
    }
    else if ("13".equals(tempTable.get(i)))
    {
        tempTable.set(i, "3rd FBS");
    }
    else
    {
        // leave as is
    }
}
于 2013-06-08T14:39:31.283 回答
4

在java中你必须使用equals()来测试字符串相等性:

if ("11".equals(tempTable.get(i))) 
{
    tempTable.set(i, "1st FBS");
}

== on objects 是一个测试引用相等性的运算符 - 即两个引用(“变量”)指向内存中的同一个实例。

== 也可能适用于字符串,因为文字字符串由 jvm 缓存和预加载,但任何动态创建的字符串都将是不同的对象,即使文本内容相同。例如,如果您从命令行读取一个字符串,即使您键入两次相同的字符,String实例也会有所不同。

正如有人在对另一个答案的评论中指出的那样,用文字进行字符串比较的常用方法如下:

"literal".equals(ref)

那是因为在文字字符串上调用方法永远不会抛出 NullPointerException 并且只会false在 ref 为 null时返回

于 2013-06-08T14:40:50.710 回答