我怎样才能检查一个数组是否为空/空?
我有没有元素的int
数组,我试图检查它是否是空的。
例如,为什么下面的代码中的if语句不成立?
int[] k = new int[3]; if(k==null) { System.out.println(k.length); }
null
数组和空数组之间有一个关键的区别。 这是一个null
testing。
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); }
你提出了它,所以它永远不会是空的。