如何检查数组是否为空/空?

时间:2010-03-03 09:20:51

标签: java arrays

我有int数组,没有任何元素,我正在尝试检查它是否为空。

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

int[] k = new int[3];

if(k==null)
{
    System.out.println(k.length);
}

14 个答案:

答案 0 :(得分:178)

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;
  }
}

答案 1 :(得分:72)

Order中的

ArrayUtils.isNotEmpty(testArrayName)确保Array不为null或为空

答案 2 :(得分:17)

看看它的长度:

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

虽然同时检查null更安全:

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

答案 3 :(得分:4)

我来自.net背景。但是,java / c#更多/更少相同。

如果实例化非基本类型(在您的情况下为数组),则它不会为空 例如int[] numbers = new int[3];
在这种情况下,空间被分配&amp;每个元素的默认值为0。

null当你没有new时。{ 例如

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

答案 4 :(得分:2)

int数组初始化为零,因此它实际上不会包含空值。只有Object的数组最初才会包含null。

答案 5 :(得分:2)

这里非常简单的一点是,变量k不是null,因为它指向数组。数组本身是空的并不重要。如果变量k没有指向任何内容,则帖子中的空值测试只会评估为真。

答案 6 :(得分:2)

我测试如下。希望能帮助到你。

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");
        }   

答案 7 :(得分:1)

在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)

答案 8 :(得分:0)

没有元素的int数组不一定是null。如果尚未分配,则仅null。有关Java数组的更多信息,请参阅this tutorial

您可以测试数组的长度:

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

答案 9 :(得分:0)

您还可以通过查找其长度来检查数组中是否有任何元素,然后将其放入if-else语句中以检查它是否为null。

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

答案 10 :(得分:0)

    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数组是否为空一样接近。 虽然当数组中的int实际上为零时,这将不起作用。它适用于{1,2,3},如果{2,0}仍会返回false,但{0}将返回true

答案 11 :(得分:0)

org.apache.commons.lang中也提供了检查数组是否为空的方法:

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);

答案 12 :(得分:0)

如果您要检查弹簧框架是否工作,则objectUtils类中的isEmpty方法会有所帮助,

public static boolean isEmpty(@Nullable Object[] array) {
        return (array == null || array.length == 0);
    }

答案 13 :(得分:-1)

我相信你想要的是

int[] k = new int[3];

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

你把它新起来所以它永远不会是空的。