1

我在 for 循环中有以下代码,以查看字符串是否等于搜索字符串:

if(Data.coord[i].equals(Data.search))

我已经用确切的值测试了代码,即如果 1=1 并且其余代码工作正常。它只是不喜欢字符串比较。控制台给出了这个错误:

Exception in thread "main" java.lang.NullPointerException
at highercoursework.Search.main(Search.java:16)
at highercoursework.Main.main(Main.java:16)

谢谢

4

6 回答 6

2

您的数组中有一个未填充的元素,即

Data.coord[i]

null。请注意,Data.search 可能为 null,但该equals()方法将处理此问题。您只需要先执行 lement 检查。

于 2012-11-15T10:25:46.030 回答
2

您应该将常数与您的参数进行比较,因为它可以是null.

例如,如果Data.search是您正在搜索的常量,您应该这样做:

if(Data.search.equals(Data.coord[i]))

在这种情况下,您最终不会尝试在null引用上调用方法,也不需要不必要null的检查。

于 2012-11-15T10:26:12.537 回答
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");
    }
    

注意:您可以用更适合您要求的代码替换记录器消息。


  • 如果您的 coord[i] 可以为空

如果 Data.coord[i] 为空,则以这种方式进行比较不会引发异常。(假设Data.search是一个常量,不能为null)所以这种情况的规则是:优先使用String对象常量调用equals方法。

if (Data.search.equals(Data.coord[i])) {}
于 2012-11-15T11:12:55.700 回答
1
String[] coord = new String[100];

这意味着您可以为 coord[0] 分配一些东西,但在您这样做之前,coord[0] 为空。因此出现空指针异常。

你可以试试。

String data= Data.coord[i];
if(data != null && data.equals(Data.search))
于 2012-11-15T10:27:36.790 回答
0

尝试这个:

if(DATA != null && Data.coord[i].equals(Data.search))
于 2012-11-15T10:28:14.490 回答
0

阅读本文以了解什么是空指针异常?

如果 coord[] 已正确初始化,则 valueData.coord[i]可能为 null。你可以检查

if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}
于 2012-11-15T10:33:42.240 回答