JAVA中字符串数组的比较

JAVA中字符串数组的比较,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,我在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

我在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)

谢谢

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

Data.coord[i]

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

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

Data.coord[i]

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

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

例如,如果要搜索的
Data.search
是一个常数,则应执行以下操作:

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

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

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

String[] coord = new String[100];
例如,如果要搜索的
Data.search
是一个常数,则应执行以下操作:

if(Data.search.equals(Data.coord[i]))
在这种情况下,您不会试图在
null
引用上调用方法,也不需要不必要的
null
检查

String[] coord = new String[100];
这意味着您可以将某些内容分配给coord[0],但在分配之前,coord[0]为空。因此出现了空指针异常

你可以试试

String data= Data.coord[i];
if(data != null && data.equals(Data.search))
这意味着您可以将某些内容分配给coord[0],但在分配之前,coord[0]为空。因此出现了空指针异常

你可以试试

String data= Data.coord[i];
if(data != null && data.equals(Data.search))
试试这个:

if(DATA != null && Data.coord[i].equals(Data.search))
试试这个:

if(DATA != null && Data.coord[i].equals(Data.search))
读这篇文章来理解

如果coord[]已正确初始化,
Data.coord[i]
的值可能为空。你可以查一下

if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}
读这篇文章来理解

如果coord[]已正确初始化,
Data.coord[i]
的值可能为空。你可以查一下

if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}

您可以通过两种方式避免问题:

  • 在这种情况下,coord[i]不应为null

    if (Data.coord[i] != null) {
        if(Data.coord[i].equals(Data.search)) {
    
        }
    } else {
        logger.error("Unexpected Behavior: coord[i] should not be null");
    }
    
注意:您可以使用更适合您的要求的代码替换记录器消息


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

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

您可以通过两种方式避免问题:

  • 在这种情况下,coord[i]不应为null

    if (Data.coord[i] != null) {
        if(Data.coord[i].equals(Data.search)) {
    
        }
    } else {
        logger.error("Unexpected Behavior: coord[i] should not be null");
    }
    
注意:您可以使用更适合您的要求的代码替换记录器消息


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

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


在调试模式下重新启动并设置断点。数组在数据类中初始化:静态字符串[]坐标=新字符串[100];但是,如果该数组不需要任何数据,那么它只会存储为空值。您确定我是
data.coord[]
的有效键吗?我建议将此行拆分为单独的行,以便您可以从日志中调试此问题。空指针可以是Data.coord或Data.coord[i]甚至Data.search。另一件事是调试字符串数组似乎不是initialisedRestart,而是在调试模式下设置断点。数组是在一个数据类中初始化的:static String[]coord=new String[100];但是,如果该数组不需要任何数据,那么它只会存储为空值。您确定我是
data.coord[]
的有效键吗?我建议将此行拆分为单独的行,以便您可以从日志中调试此问题。空指针可以是Data.coord或Data.coord[i]甚至Data.search。另一件事是调试你的字符串数组似乎不是initialisedah对的,我想不出一个方法来避免这个。我可以先对ifs进行检查,检查值是否为空,然后只比较非空值?不,你应该调用
equals()
对象,你知道它存在,因此使用我答案中的形式。在比较对象时,这被认为是一种良好的做法。在你已经知道的对象上总是调用
equals()
,如果可能的话,它不是空的。我认为@AdamArold是绝对正确的,从逻辑上讲,它为你省去了麻烦,并且避免了你的异常,这是更合适的方法啊,对了,我想不出一种方法来避免这种情况。我可以先对ifs进行检查,检查值是否为空,然后只比较非空值?不,你应该调用
equals()
对象,你知道它存在,因此使用我答案中的形式。在比较对象时,这被认为是一种良好的做法。如果可能的话,总是在你已经知道的对象上调用
equals()
。我认为@AdamArold是绝对正确的,从逻辑上讲它为你省去了麻烦,并且避免了你的异常,这是一种更合适的方法,在这种情况下,他必须对一个对象进行null检查。但在这种情况下,我们知道
Data.search
是一个常数。我们知道吗?我不确定这是否是明确的(在我看来,这就像是用户输入值或类似的值),我是从上下文中假设的。可能是空的,但我真的不这么认为。在这种情况下,他必须检查一个空的。但在这种情况下,我们知道
Data.search
是一个常数。我们知道吗?我不确定这是否是明确的(在我看来,这就像是用户输入值或类似的值),我是从上下文中假设的。可能是空的,但我真的不这么认为。