我有一个没有任何元素的int
数组,并且我想要检查它是否为空。
例如,为什么下面代码中if语句的条件永远不成立?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
在null
数组和空数组之间存在重要的区别。这是一个针对null
的测试。
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
在这里,“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;
}
}
obj !- null
,可能应该是 obj != null
。 - user85421null
是不同类型的。 - Elijah MockArrayUtils.isNotEmpty(testArrayName)
来自于 org.apache.commons.lang3
包,确保数组不为 null 或空
可以在org.apache.commons.lang中找到检查数组是否为空或null的方法:
import org.apache.commons.lang.ArrayUtils;
ArrayUtils.isEmpty(array);
看一下它的长度:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
尽管同时检查 null 更加安全:
if (i == null || i.length == 0) { }
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");
}
numbers
尚未初始化。"未初始化"和null
并不相同。 - Joachim Sauerint[] numbers
更改为int[] numbers == null
;在C#中,情况并非如此。 - shahkalpeshint[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)
对于对象:
Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)
一个int数组被初始化为零,因此它实际上永远不会包含null。只有Object类型的数组在初始状态下才会包含null。
ObjectUtils
类中的isEmpty(Object[])
方法会有所帮助。public static boolean isEmpty(@Nullable Object[] array) {
return (array == null || array.length == 0);
}
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");
}