我在for循环中有以下代码,以查看字符串是否等于搜索字符串:
if(Data.coord[i].equals(Data.search))
我用精确的值测试了代码,即1 = 1,其余代码工作正常。它只是不喜欢字符串比较。 consol发出了这个错误:
Exception in thread "main" java.lang.NullPointerException
at highercoursework.Search.main(Search.java:16)
at highercoursework.Main.main(Main.java:16)
由于
答案 0 :(得分:2)
你的数组中有一个未填充的元素,即
Data.coord[i]
是null
。请注意,Data.search可以为null,但equals()
方法将处理此问题。你只需要先进行杠杆检查。
答案 1 :(得分:2)
您应该将常量与参数进行比较,因为它可以是null
。
例如,如果Data.search
是您要搜索的常量,则应执行以下操作:
if(Data.search.equals(Data.coord[i]))
在这种情况下,您最终不会尝试在null
引用上调用方法,也不需要进行不必要的null
检查。
答案 2 :(得分:1)
String[] coord = new String[100];
这意味着您可以为coord [0]指定一些内容,但在此之前,coord [0]为空。因此空指针异常。
你可以试试。
String data= Data.coord[i];
if(data != null && data.equals(Data.search))
答案 3 :(得分:1)
您可以通过两种方式避免您的问题:
如果coord [i]不应该为空
if (Data.coord[i] != null) {
if(Data.coord[i].equals(Data.search)) {
}
} else {
logger.error("Unexpected Behavior: coord[i] should not be null");
}
注意:您可以使用符合您要求的更合适的代码替换记录器消息。
如果Data.coord [i]为null,则以这种方式进行比较不会抛出异常。 (假设Data.search是常量而不能为null)所以这种情况的规则是:在优先级中使用String对象常量来调用方法equals。
if (Data.search.equals(Data.coord[i])) {}
答案 4 :(得分:0)
试试这个:
if(DATA != null && Data.coord[i].equals(Data.search))
答案 5 :(得分:0)
阅读本文以了解What is a Null Pointer Exception?
如果正确初始化coord [],Data.coord[i]
的值可能为空。你可以检查
if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}