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

JavaJavaBeginner
立即练习

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

简介

在这个实验中,你将学习如何检查 Java 中的数组是否为空。我们将介绍检查数组长度的基本技术,还会讲解如何处理数组本身可能为 null 的情况。你将通过不同类型的数组来练习这些概念,以巩固你的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") subgraph Lab Skills java/operators -.-> lab-560002{{"如何在 Java 中检查数组是否为空"}} java/if_else -.-> lab-560002{{"如何在 Java 中检查数组是否为空"}} java/arrays -.-> lab-560002{{"如何在 Java 中检查数组是否为空"}} java/arrays_methods -.-> lab-560002{{"如何在 Java 中检查数组是否为空"}} java/exceptions -.-> lab-560002{{"如何在 Java 中检查数组是否为空"}} end

检查数组长度是否为零

在这一步中,你将学习如何通过检查数组的长度来判断 Java 中的数组是否为空。这是处理数组时的一项基本操作,可避免出现错误。

首先,在你的 ~/project 目录下创建一个名为 ArrayLengthCheck.java 的新 Java 文件。你可以使用左侧的 WebIDE 文件资源管理器来完成此操作。在 ~/project 区域内右键单击,选择“新建文件”,然后输入 ArrayLengthCheck.java

现在,在编辑器中打开 ArrayLengthCheck.java 文件,并添加以下代码:

public class ArrayLengthCheck {

    public static void main(String[] args) {
        // Declare and initialize an empty integer array
        int[] emptyArray = {};

        // Declare and initialize an integer array with elements
        int[] populatedArray = {1, 2, 3, 4, 5};

        // Check the length of the empty array
        if (emptyArray.length == 0) {
            System.out.println("emptyArray is empty.");
        } else {
            System.out.println("emptyArray is not empty. Length: " + emptyArray.length);
        }

        // Check the length of the populated array
        if (populatedArray.length == 0) {
            System.out.println("populatedArray is empty.");
        } else {
            System.out.println("populatedArray is not empty. Length: " + populatedArray.length);
        }
    }
}

下面来理解一下这里的新概念:

  • int[] emptyArray = {};:这行代码声明了一个名为 emptyArray 的整数数组,并将其初始化为空数组。
  • int[] populatedArray = {1, 2, 3, 4, 5};:这行代码声明了一个名为 populatedArray 的整数数组,并使用五个整数元素对其进行初始化。
  • array.length:这是 Java 中数组的一个属性,用于获取数组中的元素数量。
  • if (condition) { ... } else { ... }:这是一个 if-else 语句,是编程中基本的控制流结构。它允许程序做出决策。如果括号内的 condition 为真,则执行 if 块中的代码;否则,执行 else 块中的代码。

在这段代码中,我们使用 .length 属性来检查每个数组的长度是否等于 0。如果是,则打印一条消息表明数组为空;否则,打印一条消息表明数组不为空,并打印其长度。

保存文件(Ctrl+S 或 Cmd+S)。

现在,打开 WebIDE 底部的终端。确保你位于 ~/project 目录下。如果不是,请使用命令 cd ~/project

使用 javac 命令编译 Java 程序:

javac ArrayLengthCheck.java

如果编译成功,你将看不到任何输出。~/project 目录下会创建一个 ArrayLengthCheck.class 文件。

现在,使用 java 命令运行编译后的程序:

java ArrayLengthCheck

你应该会看到以下输出:

emptyArray is empty.
populatedArray is not empty. Length: 5

这个输出证实了我们的程序根据数组的长度正确识别出了空数组和有元素的数组。在尝试访问数组元素之前检查数组的长度是防止出现 ArrayIndexOutOfBoundsException 等错误的关键步骤,当你尝试访问数组中不存在的索引处的元素时,就会发生这种错误。

处理空指针数组

在上一步中,你学习了如何通过检查数组的长度来判断数组是否为空。然而,还有另一个重要的情况需要考虑:如果数组本身为 null 该怎么办?

在 Java 中,变量可以持有对象的引用,也可以持有特殊值 null,这意味着它不引用任何对象。如果你尝试访问值为 null 的数组变量的 .length 属性,程序将会因 NullPointerException 而崩溃。这是 Java 中非常常见的错误,因此了解如何处理它很重要。

让我们修改之前的程序,以演示并处理 null 数组的情况。

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

将现有代码替换为以下内容:

public class ArrayLengthCheck {

    public static void main(String[] args) {
        // Declare an integer array but do not initialize it (it will be null)
        int[] nullArray = null;

        // Declare and initialize an empty integer array
        int[] emptyArray = {};

        // Declare and initialize an integer array with elements
        int[] populatedArray = {1, 2, 3, 4, 5};

        // Function to check if an array is null or empty
        checkArrayStatus(nullArray, "nullArray");
        checkArrayStatus(emptyArray, "emptyArray");
        checkArrayStatus(populatedArray, "populatedArray");
    }

    // A helper method to check and print the status of an array
    public static void checkArrayStatus(int[] arr, String arrayName) {
        System.out.println("Checking " + arrayName + "...");
        if (arr == null) {
            System.out.println(arrayName + " is null.");
        } else if (arr.length == 0) {
            System.out.println(arrayName + " is empty.");
        } else {
            System.out.println(arrayName + " is not empty. Length: " + arr.length);
        }
        System.out.println(); // Print a blank line for better readability
    }
}

让我们看看这些更改:

  • int[] nullArray = null;:我们声明了一个整数数组变量 nullArray,并将其值显式设置为 null
  • public static void checkArrayStatus(int[] arr, String arrayName):我们创建了一个名为 checkArrayStatus 的新方法。该方法接受一个整数数组 (arr) 和一个字符串 (arrayName) 作为输入,这有助于我们复用检查数组状态的逻辑。
  • if (arr == null):这是处理 null 数组的关键部分。我们首先使用相等运算符 == 检查数组变量 arr 是否为 null。如果是 null,我们会打印一条消息并停止对该数组的进一步检查。
  • else if (arr.length == 0):只有在数组不为 null 时才会执行此检查。如果数组不为 null,我们会检查其长度是否为 0,以判断它是否为空。
  • main 方法现在会为每个数组 (nullArrayemptyArraypopulatedArray) 调用 checkArrayStatus 方法。

保存文件(Ctrl+S 或 Cmd+S)。

~/project 目录下打开终端。

编译修改后的 Java 程序:

javac ArrayLengthCheck.java

如果编译成功,运行程序:

java ArrayLengthCheck

你应该会看到以下输出:

Checking nullArray...
nullArray is null.

Checking emptyArray...
emptyArray is empty.

Checking populatedArray...
populatedArray is not empty. Length: 5

这个输出表明我们的程序正确识别出了 null 数组、空数组和有元素的数组。在检查数组长度之前先检查是否为 null,可以避免在对 null 数组尝试访问 .length 属性时出现 NullPointerException。这是 Java 编程中的一项基本最佳实践。

使用不同类型的数组进行测试

在前面的步骤中,我们使用了整数数组 (int[])。需要明白的是,检查 null.length 属性的概念适用于 Java 中任何数据类型的数组,无论是 intdoubleboolean 等基本数据类型,还是 String 或自定义类等对象类型。

让我们再次修改程序,以演示如何检查不同类型数组的状态。

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

将现有代码替换为以下内容:

public class ArrayLengthCheck {

    public static void main(String[] args) {
        // Declare a null String array
        String[] nullStringArray = null;

        // Declare an empty double array
        double[] emptyDoubleArray = {};

        // Declare a boolean array with elements
        boolean[] populatedBooleanArray = {true, false, true};

        // Declare a String array with elements
        String[] populatedStringArray = {"apple", "banana", "cherry"};

        // Use the helper method to check different array types
        checkArrayStatus(nullStringArray, "nullStringArray");
        checkArrayStatus(emptyDoubleArray, "emptyDoubleArray");
        checkArrayStatus(populatedBooleanArray, "populatedBooleanArray");
        checkArrayStatus(populatedStringArray, "populatedStringArray");
    }

    // A generic helper method to check and print the status of an array
    // We use Object[] because it can represent an array of any object type
    // For primitive types, the check still works on the array reference itself
    public static void checkArrayStatus(Object arr, String arrayName) {
        System.out.println("Checking " + arrayName + "...");
        if (arr == null) {
            System.out.println(arrayName + " is null.");
        } else if (arr instanceof Object[]) {
            // For object arrays, we can cast and check length
            Object[] objectArray = (Object[]) arr;
            if (objectArray.length == 0) {
                 System.out.println(arrayName + " is empty.");
            } else {
                 System.out.println(arrayName + " is not empty. Length: " + objectArray.length);
            }
        } else if (arr.getClass().isArray()) {
             // For primitive arrays, we can't cast to Object[], but can still check length
             // using reflection or simply rely on the null check and the fact that
             // primitive arrays also have a .length property accessible directly
             // (though accessing it here would require more complex reflection)
             // For simplicity in this example, we'll just indicate it's a non-null, non-empty primitive array
             // A more robust check would involve reflection or overloaded methods for each primitive type
             try {
                 int length = java.lang.reflect.Array.getLength(arr);
                 if (length == 0) {
                     System.out.println(arrayName + " is empty.");
                 } else {
                     System.out.println(arrayName + " is not empty. Length: " + length);
                 }
             } catch (IllegalArgumentException e) {
                  System.out.println("Could not determine length for " + arrayName);
             }

        } else {
             System.out.println(arrayName + " is not an array.");
        }
        System.out.println(); // Print a blank line for better readability
    }
}

让我们看看这些更改:

  • 我们创建了不同类型的数组:String[]double[]boolean[]
  • checkArrayStatus 方法现在接受 Object arr 作为参数。这使得它可以接受任何类型的数组,因为 Java 中的所有数组都是对象。
  • checkArrayStatus 方法内部,我们首先检查 arr 是否为 null
  • 如果它不为 null,我们使用 instanceof Object[] 来检查它是否为对象数组。如果是,我们将其转换为 Object[] 并检查其 .length
  • 我们还添加了 arr.getClass().isArray() 检查,以查看该对象是否为数组(这对于对象数组和基本数据类型数组都适用)。
  • 对于基本数据类型数组,在这个通用方法中不使用反射直接访问 .length 比较棘手。提供的代码使用 java.lang.reflect.Array.getLength(arr) 作为一种更通用的方法来获取任何数组类型的长度。

保存文件(Ctrl+S 或 Cmd+S)。

~/project 目录下打开终端。

编译修改后的 Java 程序:

javac ArrayLengthCheck.java

如果编译成功,运行程序:

java ArrayLengthCheck

你应该会看到类似以下的输出:

Checking nullStringArray...
nullStringArray is null.

Checking emptyDoubleArray...
emptyDoubleArray is empty.

Checking populatedBooleanArray...
populatedBooleanArray is not empty. Length: 3

Checking populatedStringArray...
populatedStringArray is not empty. Length: 4

这表明在 Java 中,检查 null 和检查长度的原则在不同类型的数组中是一致的。虽然使用 Object 和反射的通用 checkArrayStatus 方法更复杂,但对于特定类型的数组(如 int[]String[] 等),先检查 null 再检查 .length 的核心思想是相同的。

总结

在本次实验中,你学习了如何通过检查数组的 length 属性来判断 Java 中的数组是否为空。你创建了一个 Java 文件 ArrayLengthCheck.java,并编写代码声明了空的和有元素的整数数组。通过使用 if-else 语句并将数组的长度与零进行比较,你成功地判断出每个数组是否为空,并将结果打印到控制台。这项基础技术对于在处理数组时避免错误至关重要。