如何在 Java 中检查数组是否为 null

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Java 中的数组是否为 null。我们将从理解如何检查数组引用本身是否为 null 开始,以防止出现 NullPointerException

接下来,我们将探讨如何将空值检查与长度检查相结合,以实现更健壮的数组处理。最后,你将通过处理一个已初始化的空数组来检验自己的理解程度。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/arrays("Arrays") subgraph Lab Skills java/if_else -.-> lab-560003{{"如何在 Java 中检查数组是否为 null"}} java/arrays -.-> lab-560003{{"如何在 Java 中检查数组是否为 null"}} end

检查数组引用是否为 null

在这一步中,你将学习如何检查 Java 中的数组引用是否为 null。检查 null 是 Java 编程中的一项基本操作,可防止出现 NullPointerException,这是一种常见的运行时错误。

当你试图将一个指向空值(即 null)的变量当作对象使用时,就会发生 NullPointerException。这就好比你试图打开一个根本不存在的盒子,当你遇到 NullPointerException 时,情况与此类似。

下面我们创建一个简单的 Java 程序,来演示如何检查数组引用是否为 null

  1. 如果 HelloJava.java 文件尚未在 WebIDE 编辑器中打开,请打开该文件。

  2. 将文件的全部内容替换为以下代码:

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = null; // Declaring an array reference and setting it to null
    
            // Check if the array reference is null before trying to use it
            if (names == null) {
                System.out.println("The 'names' array is null.");
            } else {
                System.out.println("The 'names' array is not null.");
            }
        }
    }

    下面来看看这段代码的新增部分:

    • String[] names = null;:这行代码声明了一个名为 names 的数组变量,该变量可以存储 String 对象。随后,我们立即将其赋值为 null。这意味着 names 变量目前并未指向内存中的任何实际数组对象。
    • if (names == null):这是一个 if 语句,用于在编程中进行条件判断。它会检查括号内的条件(names == null)是否为真。== 运算符用于比较 names 变量是否等于 null
    • System.out.println("The 'names' array is null.");:只有当条件 names == null 为真时,才会执行这行代码。
    • System.out.println("The 'names' array is not null.");:只有当条件 names == null 为假(即 names 不为 null)时,才会执行这行代码。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 编译修改后的程序。在终端中运行以下命令:

    javac HelloJava.java

    如果编译成功,你将不会看到任何输出。

  5. 运行编译后的程序:

    java HelloJava

    你应该会看到以下输出:

    The 'names' array is null.

    这个输出证实了我们的检查正确地识别出 names 数组引用为 null

理解如何检查 null 对于编写健壮的 Java 代码至关重要。在下一步中,我们将探讨当尝试访问一个为 null 的数组的长度时会发生什么,以及如何组合使用各种检查。

结合空值检查和长度检查

在上一步中,我们学习了如何检查数组引用是否为 null。现在,让我们来探讨一下当尝试访问一个 null 数组的长度时会发生什么,以及如何将空值检查与数组长度检查结合起来。

尝试访问一个 null 数组引用的 .length 属性会导致 NullPointerException。这是因为你试图访问一个不存在的对象的属性。

让我们修改程序来演示这一点,然后添加一个组合检查。

  1. 在 WebIDE 编辑器中打开 HelloJava.java 文件。

  2. 将文件的全部内容替换为以下代码:

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = null; // Declaring an array reference and setting it to null
    
            // Attempting to access the length of a null array (will cause an error)
            // int length = names.length; // Uncommenting this line would cause a NullPointerException
    
            // Combine null check and length check
            if (names != null && names.length > 0) {
                System.out.println("The 'names' array is not null and has elements.");
            } else {
                System.out.println("The 'names' array is null or empty.");
            }
        }
    }

    以下是新增或修改的部分:

    • 我们保留了 String[] names = null;,以从一个 null 数组开始。
    • 注释掉的行 // int length = names.length; 展示了如果我们直接尝试访问长度会发生什么。我们将其注释掉,这样程序就不会立即崩溃。
    • if (names != null && names.length > 0):这是组合检查。
      • names != null:这部分检查 names 数组引用是否 不是 null
      • &&:这是逻辑与运算符。&& 两边的条件都必须为真,整个条件才为真。
      • names.length > 0:这部分检查 names 数组的长度是否大于 0。由于 Java 中 && 运算符的短路特性,只有当第一部分 (names != null) 为真时,才会执行此检查。这可以防止 NullPointerException
    • else 块现在会输出一条消息,表明数组要么是 null,要么为空。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 编译修改后的程序:

    javac HelloJava.java

    同样,如果编译成功,将不会有输出。

  5. 运行编译后的程序:

    java HelloJava

    你应该会看到以下输出:

    The 'names' array is null or empty.

    这个输出表明我们的组合检查正确地识别出数组要么是 null,要么为空。由于我们将其初始化为 nullif 条件的第一部分 (names != null) 为假,因此执行了 else 块。

像这样组合检查是在 Java 中安全处理数组引用的标准方法,可确保在检查长度等属性或访问元素时不会遇到 NullPointerException

使用已初始化的空数组进行测试

在前面的步骤中,我们学习了如何检查数组引用是否为 null,以及如何将其与长度检查结合起来。我们看到,组合检查能够正确识别出 null 数组。

现在,让我们使用一个不为 null 但为空(长度为 0)的数组来测试我们的组合检查。这是你会遇到的另一种常见情况。

  1. 在 WebIDE 编辑器中打开 HelloJava.java 文件。

  2. 修改声明并初始化 names 数组的那一行。将 String[] names = null; 改为 String[] names = new String[0];。其余代码,包括带有组合检查的 if 语句,应保持不变。

    更新后的代码应如下所示:

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = new String[0]; // Declaring and initializing an empty array
    
            // Combine null check and length check
            if (names != null && names.length > 0) {
                System.out.println("The 'names' array is not null and has elements.");
            } else {
                System.out.println("The 'names' array is null or empty.");
            }
        }
    }

    以下是修改之处:

    • String[] names = new String[0];:这行代码现在创建了一个大小为 0 的 String 对象数组。names 变量现在指向内存中的一个实际数组对象,但该数组不包含任何元素。它 不是 null
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 编译修改后的程序:

    javac HelloJava.java

    如果编译成功,将不会有输出。

  5. 运行编译后的程序:

    java HelloJava

    你应该会看到以下输出:

    The 'names' array is null or empty.

    这个输出与数组为 null 时的输出相同。让我们来理解一下原因。我们的 if 条件是 if (names != null && names.length > 0)

    • names != null:这部分现在为真,因为 names 指向一个空数组对象。
    • names.length > 0:这部分检查数组的长度是否大于 0。由于数组的长度为 0,这个条件为假。
    • 由于 && 条件的第二部分为假,整个条件 (names != null && names.length > 0) 的计算结果为假,因此执行 else 块。

这表明我们的组合检查能够正确识别 null 数组和空数组,当你只想处理包含元素的数组时,这通常是你期望的行为。

总结

在本次实验中,我们学习了如何检查 Java 中的数组引用是否为 null,以防止出现 NullPointerException。我们首先创建了一个简单的程序,演示了如何使用 if 语句和 == 运算符来检查 null 数组引用。

然后,我们探讨了如何将空值检查与长度检查结合起来,以处理数组不为 null 但可能为空的情况。最后,我们使用一个已初始化的空数组对组合检查进行了测试,以理解 null 数组引用和空数组之间的区别。