[英]How can I check whether an array is null / empty?
我有一个没有元素的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");
}
这里的“空”没有官方意义。 我选择将空定义为具有 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 不为 null 或为空
看它的长度:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
虽然同时检查 null 更安全:
if (i == null || i.length == 0) { }
org.apache.commons.lang 上也存在检查数组是否为空或空的方法:
import org.apache.commons.lang.ArrayUtils;
ArrayUtils.isEmpty(array);
我来自 .net 背景。 但是,java/c# 或多/少相同。
如果你实例化一个非原始类型(在你的例子中是数组),它不会为空。
例如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。
这里的要点很简单,变量 k 不为空,因为它指向数组。 数组本身是否为空并不重要。 如果变量 k 没有指向任何内容,则您帖子中的空测试只会评估为真。
我测试如下。 希望能帮助到你。
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");
}
在 Java 8+ 中,您可以借助流 allMatch 方法来实现这一点。
对于原始:
int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)
对于对象:
Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)
如果您试图在 spring 框架中检查,那么ObjectUtils
类中的isEmpty(Object[])
方法会ObjectUtils
帮助,
public static boolean isEmpty(@Nullable Object[] array) {
return (array == null || array.length == 0);
}
没有元素的int
数组不一定是null
。 如果尚未分配,它只会为null
。 有关 Java 数组的更多信息,请参阅本教程。
您可以测试数组的长度:
void foo(int[] data)
{
if(data.length == 0)
return;
}
public boolean empty() {
boolean isEmpty = true;
int i = 0;
for (int j = 0; j < array.length; j++) {
if (array[j] != 0) {
i++;
}
}
if (i != 0) {
isEmpty = false;
}
return isEmpty;
}
这与我要检查 int 数组是否为空一样接近。 尽管当数组中的整数实际上为零时这将不起作用。 它适用于 {1,2,3},如果 {2,0} 但 {0} 将返回 true,它仍然会返回 false
我相信你想要的是
int[] k = new int[3];
if (k != null) { // Note, != and not == as above
System.out.println(k.length);
}
您对其进行了更新,因此它永远不会为空。
也可以通过找出数组的长度来判断数组中是否有元素,然后放入if-else语句中判断是否为空。
int[] k = new int[3];
if(k.length == 0)
{
//do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.