indexOf可以找到null

时间:2015-05-04 23:23:34

标签: java arraylist null

这是我对indexOf方法(自定义arraylist类)的实现

public int indexOf(String string) {
    for(int i = 0; i < size; i++) {
        if(strings[i].equalsIgnoreCase(string)){
            return i;
        }   
    }
    return -1;
}

这是应返回null的代码,但不是。我不明白为什么

public void indexOf_can_find_null() {
     StringArrayList lst = list("1", "2", null, "3", "4", "3", "2", "1");
     assertEquals(2, lst.indexOf(null));
}

3 个答案:

答案 0 :(得分:2)

这永远不会奏效。您无法使用equalsIgnoreCase()来测试null

equalsIgnoreCase()方法对字符串的VALUES进行比较。空字符串没有值。当你使用null时,你说这个String对象没有引用任何东西,因此它没有值,因此任何值都不能等于它。如果在调用equalsIgnoreCase()之前有一个空对象,则会抛出NullReferenceException,因此它不能在任何一个方向上工作。

如果您使用==运算符,它将允许您测试字符串的引用,null将会解决,但是这不能用于字符串比较。如果你真的想要这个,你需要结合这些方法:

if(strings[i] != null && strings[i].equalsIgnoreCase(string))
    return i;
else if(strings[i] == null && string == null)
    return i;

答案 1 :(得分:1)

由于NullPointerException。当i = 2时,strings[i]null,则strings[i].equalsIgnoreCase(string)会抛出NullPointerException

PS:没有list()的代码,这只是一个疯狂的猜测

答案 2 :(得分:0)

在你的情况下,当i = 2时,你将拥有:

string[2].equalsIgnoreCase(string) evaluates to null.equalsIgnoreCase(string)

这将抛出空指针异常,因为使用了空引用。