这是我对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));
}
答案 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)
这将抛出空指针异常,因为使用了空引用。