indexOf 可以找到 null
indexOf can find null
这是我对 indexOf 方法的实现(自定义数组列表 class)
public int indexOf(String string) {
for(int i = 0; i < size; i++) {
if(strings[i].equalsIgnoreCase(string)){
return i;
}
}
return -1;
}
这是应该 return 为 null 的代码,但实际上没有。我不明白为什么
public void indexOf_can_find_null() {
StringArrayList lst = list("1", "2", null, "3", "4", "3", "2", "1");
assertEquals(2, lst.indexOf(null));
}
因为NullPointerException
。当i=2时,strings[i]
是null
,那么strings[i].equalsIgnoreCase(string)
会抛出一个NullPointerException
.
PS: 没有list()
的代码,这只是胡乱猜测
这永远行不通。您不能使用 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;
在你的例子中,当 i = 2 时,你将有:
string[2].equalsIgnoreCase(string) evaluates to null.equalsIgnoreCase(string)
这将抛出空指针异常,因为使用了空引用。
这是我对 indexOf 方法的实现(自定义数组列表 class)
public int indexOf(String string) {
for(int i = 0; i < size; i++) {
if(strings[i].equalsIgnoreCase(string)){
return i;
}
}
return -1;
}
这是应该 return 为 null 的代码,但实际上没有。我不明白为什么
public void indexOf_can_find_null() {
StringArrayList lst = list("1", "2", null, "3", "4", "3", "2", "1");
assertEquals(2, lst.indexOf(null));
}
因为NullPointerException
。当i=2时,strings[i]
是null
,那么strings[i].equalsIgnoreCase(string)
会抛出一个NullPointerException
.
PS: 没有list()
的代码,这只是胡乱猜测
这永远行不通。您不能使用 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;
在你的例子中,当 i = 2 时,你将有:
string[2].equalsIgnoreCase(string) evaluates to null.equalsIgnoreCase(string)
这将抛出空指针异常,因为使用了空引用。