ArrayList <string>槽没有使用“set(int index,String value)”方法</string>进行更新

时间:2013-06-08 14:38:11

标签: java android arraylist

创建一个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进行测试并且它可以工作,但在这种情况下,我无法按照我的意愿使用它。

任何暗示我的代码可能出错的地方?

2 个答案:

答案 0 :(得分:4)

使用字符串equals()而不是==进行字符串比较。当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
    }
}

答案 1 :(得分:4)

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

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

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

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

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

"literal".equals(ref)

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