在这篇文章中,我们将看到如何在Java中检查数组是否为空。
数组是一种数据结构,便于将多个数据实例一起存储在连续的内存位置。
这篇文章讨论了在Java中数组被认为是空的不同情况。它还讨论了在不同的情况下检查Java中数组是否为空的方法。
在Java中检查数组是否为空
当Java认为一个数组是空的时候,有三种不同的情况。这些情况如下。
- 数组变量的引用为空。
- 数组不包含任何元素。
- 数组中只有空元素。
让我们逐一了解这些情况。
阵列变量有空引用
在这种情况下,一个数组变量实际上存储了一个空引用,因此,几乎没有存储任何东西。这种情况可能来自两种不同的可能性,如下所示。
-
当数组没有被实例化时,数组变量有一个空的引用,使得它成为一个空数组。例如,
int [] arr;> 你应该注意,Java不允许你使用一个未初始化的局部变量。所以这种情况并不适用于局部变量。然而,如果你的数组是全局声明的,它就适用。
-
当你明确地将null赋值给数组变量时。例如,
int [] arr = null;对于这种情况,当数组变量有一个空引用时,你可以直接使用平等运算符(==)来检查数组是否有空引用。
让我们看看检查Java数组这一条件的代码。
package java2blog;
public class NullArrayExample {
int [] arr;
int [] arr2 = null;
public static void main(String [] args)
{
NullArrayExample obj = new NullArrayExample();
if(obj.arr==null)
System.out.println("arr is empty (null).");
if(obj.arr2 == null)
System.out.println("arr2 is empty (null).");
}
}
输出。
arr是空的(null)。
arr2是空的(null)。
数组不包含任何元素
当你声明一个数组并将其实例化时,内存被分配给它。数组变量存储了对分配内存的引用。
然而,如果你在实例化数组时将数组的大小设为0,它将不存储任何元素,因此,它是一个空数组。
在这种情况下要检查数组是否为空。
- 使用'length'变量检查数组的长度。
- Java数组对象有一个名为'length'的变量,用来存储数组中的元素数量。
- 如果长度为零,数组就是空的。
让我们看一个实现上述步骤的例子。
package java2blog;
public class NullArrayExample {
public static void main(String [] args)
{
int [] emptyArr = new int[0];
if(emptyArr.length == 0)
System.out.println("The array is empty");
}
}
输出。
数组是空的
数组中只有空元素
Java在实例化数组时将所有非原始类型的数组初始化为空值。因此,如果你不给数组分配非空元素,它将继续包含所有元素的空值。
另外,你也可以手动给所有的数组元素分配空值。在这两种情况下,Java都认为该数组是空的。
在这种情况下要检查数组是否为空。
-
将一个布尔标志变量初始化为真。
-
循环浏览数组的所有元素。
-
检查每个元素是否为空值。
-
如果当前的元素不是空的,将标志变量的值改为false,并从循环中断开。
-
否则,移动到下一个元素。
-
循环结束后,检查标志变量。
-
如果flag为真,则数组为空。
-
否则,数组就不是空的。
让我们看看这些步骤在代码中的实现。
package java2blog;
public class NullArrayExample {
public static void main(String [] args)
{
String [] arr = new String[10];
boolean allNull = true;
for(int i=0;i<arr.length;i++)
{
if(arr[i] != null)
{
allNull=false;
break;
}
}
if(allNull)
System.out.println("The array is empty!");
else
System.out.println("The array is not empty!");
}
}
输出。
数组是空的!
请注意,代码中声明的是一个字符串数组,而不是前面案例中的一个整数数组。这是因为Java对原始数据类型的数组不以空值初始化。例如,整数数组被初始化为零。
另一方面,String是Java中的一个类,因此,String数组被初始化为空值。
在Java中使用Java库来检查数组是否是空的
从Java 8版本开始,Java提供了库方法来对所有数组元素进行检查。因此,我们可以使用这些方法来检查数组中所有空值的情况。
java.util.Arrays 类定义了 stream() 方法,可以用来调用allMatch() 方法。
stream() 方法返回一个使用作为参数传递给它的数组创建的流 。让我们看看stream() 方法的定义。
public static Stream stream(T[] array)
allMatch() 方法接受一个谓词 (一个要检查的条件),并返回一个布尔值。如果所有的数组值都满足条件,allMatch() 方法返回一个布尔值 "true"。否则,它返回一个布尔值false。让我们看看allMatch() 方法的定义。
boolean allMatch(Predicate<? super T> predicate)
注意,使用这个方法你只能检查空数组的条件,即数组中所有的元素都是空的。让我们看看代码中的例子。
package java2blog;
import java.util.Arrays;
import java.util.Objects;
public class NullArrayJava
{
public static void main(String [] args)
{
String [] arr = new String [10];
boolean isNull = Arrays.stream(arr).allMatch(Objects::isNull);
if(isNull)
System.out.println("The array is empty");
else
System.out.println("The array is not empty");
}
}
代码将Objects类的isNull 谓词条件传递给allMatch() 方法。这意味着,如果数组中的所有元素都是空值,allMatch() 方法返回真。
输出。
该数组是空的
在Java中使用Apache Commons库来检查数组是否为空
Apache Commons库在ArrayUtils 类中提供了isEmpty() 方法。这个方法可以用来检查Java中的数组是否为空。
你需要添加下面的依赖关系来获得Apache commons jar。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
让我们看看isEmpty() 方法的定义。
public static boolean isEmpty(Object[] array)
该方法检查作为参数传递给它的数组是否为空或空。如果数组是空的或空的,它返回一个布尔值true。否则,它返回false。
让我们看看代码中演示其使用的例子。
package org.arpit.java2blog;
import org.apache.commons.lang3.*;
public class NullArrayJava
{
public static void main(String [] args)
{
String [] arr = new String[0];
boolean isArrEmpty = ArrayUtils.isEmpty(arr);
if(isArrEmpty)
System.out.println("The array 1 is empty");
else
System.out.println("The array 1 is not empty");
String [] arr2 = null;
boolean isArrNull = ArrayUtils.isEmpty(arr2);
if(isArrNull)
System.out.println("The array 2 is Null");
else
System.out.println("The array 2 is not Null");
String [] arr3 = new String[10];
boolean isArrEmpty2 = ArrayUtils.isEmpty(arr3);
if(isArrEmpty2)
System.out.println("The array 3 is empty");
else
System.out.println("The array 3 is not empty");
}
}
输出。
数组1是空的
数组2是空的
数组3不是空的
你应该注意,这个方法只检查以下条件。
- 数组变量有一个空引用。
- 数组的长度为零。
它不能检查数组是否有所有的空值。
总结
在使用数组时,特别是在数组被作为参数传递给方法的情况下,你应该执行空数组的检查。这有助于防止程序的意外失败。
除了直接的方法之外,你可以使用库来检查Java中的空数组情况。然而,在使用库方法时,你应该小心。这是因为,正如我们所讨论的,这两种库方法只对空数组的一个子集的情况起作用。
希望你喜欢读这篇文章。请继续关注更多此类文章。
学习愉快!