【问题标题】:Null Pointer Excpetion when trying to test if array is empty java尝试测试数组是否为空java时出现空指针异常
【发布时间】:2014-12-14 03:10:59
【问题描述】:

我很想测试我的数组是否为空,但由于某种原因,我总是得到一个空指针异常。我不明白,因为我的测试实际上测试了该值是否为空。这是卡住的代码。我在 While 循环中得到空指针:

private int findIndex(String key) {
        int index = calculateHashCode(key);
        while (table[index] != null && !table[index].getKey().equals(key)) {
            index = (index + 1) % TABLE_SIZE;
        }
        return index;
    }

编辑

表是这样声明的:

static HashEntry[] table;

【问题讨论】:

  • table 在哪里声明? table 很可能为空。

标签: java arrays nullpointerexception


【解决方案1】:

如果tablenull。执行table[index] 的行为会取消对数组的引用,从而导致NullPointerException。空数组不是空数组。空数组大致对应于根本没有数组的事实,而table 变量指向什么。

请区分空数组、空数组和非空数组中的空元素。

数组为空:

table == null

数组为空:

table.length == 0

数组中的元素 0 为空:

table[0] == null

同样,您不能从null 对象调用方法。如果table[index] 返回一个空元素,则对其调用getKey() 可能会导致NullPointerException。如果 getKey() 为 null 然后尝试调用 equals() 也是如此。

请注意,未初始化的数组隐含为null。确保您实际初始化了数组。

【讨论】:

    【解决方案2】:

    NullPointer 异常可能是因为:

    1. table 为空,或
    2. table[index].getKey() 返回 null

    在情况 1 中,表达式 table[index] != null 的求值是从表数组中读取一项。如果 table 为 null,这将抛出 NullPointerException。

    在情况 2 中,如果 table[index].getKey() 返回 null,则表达式 table[index].getKey().equals(key) 正在调用导致异常的 null 对象引用的方法(等于)。

    【讨论】:

      【解决方案3】:

      你的table 没有初始化,声明为

      static HashEntry[] table = new HashEntry[TABLE_SIZE];
      

      所以它不为空。

      另外,如果HashEntry.getKey() 可以返回null,请确保检查这一点(或者只是翻转等号,即!key.equals(table[index].getKey())

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-16
        • 2020-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多