我怎样才能检查一个数组是否为空/空?

我有没有元素的int数组,我试图检查它是否是空的。

例如,为什么下面的代码中的if语句不成立?

 int[] k = new int[3]; if(k==null) { System.out.println(k.length); } 

null数组和空数组之间有一个关键的区别。 这是一个nulltesting。

 int arr[] = null; if (arr == null) { System.out.println("array is null"); } 

这里的“空”没有正式的意义。 我select将empty定义为有0个元素:

 arr = new int[0]; if (arr.length == 0) { System.out.println("array is empty"); } 

“空”的替代定义是,如果所有的元素都是null

 Object arr[] = new Object[10]; boolean empty = true; for (int i=0; i<arr.length; i++) { if (arr[i] != null) { empty = false; break; } } 

要么

 Object arr[] = new Object[10]; boolean empty = true; for (Object ob : arr) { if (ob != null) { empty = false; break; } } 

来自包org.apache.commons.lang3 ArrayUtils.isNotEmpty(testArrayName)确保Array不为空或为空

看看它的长度:

 int[] i = ...; if (i.length == 0) { } // no elements in the array 

虽然同时检查null是比较安全的:

 if (i == null || i.length == 0) { } 

我来自.net背景。 但是,java / c#是不一样的。

如果你实例化一个非原始types(在你的情况下是数组),它不会为空。
例如int[] numbers = new int[3];
在这种情况下,分配空间,每个元素的默认值为0。

当你不new时候它将是null
例如

 int[] numbers = null; // changed as per @Joachim's suggestion. if (numbers == null) { System.out.println("yes, it is null. Please new it up"); } 

一个int数组被初始化为零,所以它实际上不会包含空值。 只有Object的数组最初将包含null。

我testing如下。 希望能帮助到你。

 Integer[] integers1 = new Integer[10]; System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array for (Integer integer : integers1) { System.out.println(integer); //prints all 0s } //But if I manually add 0 to any index, now even though array has all 0s elements //still it is not empty // integers1[2] = 0; for (Integer integer : integers1) { System.out.println(integer); //Still it prints all 0s but it is not empty //but that manually added 0 is different } //Even we manually add 0, still we need to treat it as null. This is semantic logic. Integer[] integers2 = new Integer[20]; integers2 = null; //array is nullified // integers2[3] = null; //If I had int[] -- because it is priitive -- then I can't write this line. if (integers2 == null) { System.out.println("null Array"); } 

没有元素的int数组不一定是null 。 如果还没有分配,它只会是null 。 有关Java数组的更多信息,请参阅本教程 。

你可以testing数组的长度:

 void foo(int[] data) { if(data.length == 0) return; } 

这里非常简单的一点是variablesk不是空的,因为它指向数组。 数组本身是空的并不重要。 如果variablesk没有指向任何东西,那么在你的文章中的空testing将只评估为真。

你也可以通过查找它的长度来检查数组中是否有元素,然后把它放到if-else语句中来检查它是否为空。

 int[] k = new int[3]; if(k.length == 0) { //do something } 

我相信你想要的是

 int[] k = new int[3]; if (k != null) { // Note, != and not == as above System.out.println(k.length); } 

你提出了它,所以它永远不会是空的。