【问题标题】:Comparing string array in JAVA比较JAVA中的字符串数组
【发布时间】:2012-11-03 22:21:50
【问题描述】:

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

谢谢

【问题讨论】:

  • 在调试模式下重启并设置断点。
  • 数组在数据类中初始化:static String[] coord = new String[100];但是,如果该数组不需要数据,则将其存储为空值。
  • 你确定 i 是Data.coord[] 的有效密钥吗?
  • 我建议将此行拆分为单独的行,以便您可以从日志中调试此问题。空指针可以是 Data.coord 或 Data.coord[i] 甚至是 Data.search。其他的就是调试
  • 好像你的字符串数组没有初始化

标签: java arrays nullpointerexception


【解决方案1】:

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

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

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

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

【讨论】:

  • 在这种情况下,他必须空检查一个。但在这种情况下,我们知道Data.search 是一个常数。
  • 我们知道吗?我不确定这是否明确(在我看来,它就像用户输入值或类似值)
  • 我是根据上下文假设的。也许它是空的,但我真的不这么认为。
【解决方案2】:

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

Data.coord[i]

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

【讨论】:

  • 啊,对,我想不出办法来避免这种情况。我可以先做 ifs 来检查值是否为空,然后只比较非空值?
  • 不,你应该在一个你知道它存在的对象上调用equals(),因此使用我的答案中的表格。在比较对象时,这被认为是一种很好的做法。如果可能,请始终在您已经知道不为空的对象上调用equals()
  • 我认为@AdamArold 是绝对正确的,从逻辑上讲它可以为您省去麻烦并避免您的异常,这是更合适的方法
【解决方案3】:
String[] coord = new String[100];

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

你可以试试。

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

【讨论】:

    【解决方案4】:

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

    • 如果 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] 为 null,则以这种方式进行比较不会引发异常。 (假设Data.search是一个常量,不能为null)所以这种情况的规则是:优先使用String对象常量调用equals方法。

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

    【讨论】:

      【解决方案5】:

      阅读本文了解What is a Null Pointer Exception?

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

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

      【讨论】:

        【解决方案6】:

        试试这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-24
          • 2012-02-14
          • 2011-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多