Ankit Sachan
Ankit Sachan

Reputation: 7840

How can I check whether an array is null / empty?

I have an int array which has no elements and I'm trying to check whether it's empty.

For example, why is the condition of the if-statement in the code below never true?

int[] k = new int[3];

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

Upvotes: 178

Views: 1008587

Answers (16)

6 Pool
6 Pool

Reputation: 1

Assuming column is "array" type.

size(col(x))===0 will filter out all empty arrays (arrays with size/length=0).

Upvotes: 0

Yunus
Yunus

Reputation: 84

By 'empty array' most probably you meant length is 0.

if( array.length == 0 ) {
    // do something ...
}

But it's also worth to check first if the array ref is null or not before accessing it's property (e.g. length).

if( array != null ) {
   if( array.length == 0 ) {
      // do something ...
   }
}

And this become necessary if the array is a parameter to a method.

public boolean isEmpty( Object[] array ) throws Exception {
    if( array != null ) {
        if( array.length == 0 )
            return true;
    } else {
        throw new Exception("isEmpty(): Array ref is null");
    }
    return false;
}

The checking should be done in cascading way (not using && i.e. array != null && array.length == 0) since the order of evaluation of the conditions depends on implementation of the compiler. If it is evaluating the array.length == 0 condition first, it will ends with runtime error if array is null.

Upvotes: 0

if you are trying to check that in spring framework then isEmpty(Object[]) method in ObjectUtils class helps,

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

Upvotes: 3

Shivang Agarwal
Shivang Agarwal

Reputation: 1923

In Java 8+ you achieve this with the help of streams allMatch method.

For primitive:

int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)

For Object:

Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)

Upvotes: 4

Jackkobec
Jackkobec

Reputation: 6705

Method to check array for null or empty also is present on org.apache.commons.lang:

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);

Upvotes: 33

nanatash
nanatash

Reputation: 1

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

This is as close as I got to checking if an int array is empty. Although this will not work when the ints in the array are actually zero. It'll work for {1,2,3}, and it'll still return false if {2,0} but {0} will return true

Upvotes: 0

J_fruitty
J_fruitty

Reputation: 57

You can also check whether there is any elements in the array by finding out its length, then put it into if-else statement to check whether it is null.

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

Upvotes: -1

Uddhav P. Gautam
Uddhav P. Gautam

Reputation: 7626

I tested as below. Hope it helps.

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

Upvotes: 2

hubbabubba
hubbabubba

Reputation: 997

The point here very simply is that the variable k isn't null because it points to the array. It doesn't matter that the array itself is empty. The null test in your post would only evaluate to true if the variable k didn't point to anything.

Upvotes: 2

Shravan Ramamurthy
Shravan Ramamurthy

Reputation: 4096

ArrayUtils.isNotEmpty(testArrayName) from the package org.apache.commons.lang3 ensures Array is not null or empty

Upvotes: 150

cletus
cletus

Reputation: 625087

There's a key difference between a null array and an empty array. This is a test for null.

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

"Empty" here has no official meaning. I'm choosing to define empty as having 0 elements:

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

An alternative definition of "empty" is if all the elements are null:

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

or

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

Upvotes: 267

vickirk
vickirk

Reputation: 4067

I believe that what you want is

int[] k = new int[3];

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

You newed it up so it was never going to be null.

Upvotes: -1

shahkalpesh
shahkalpesh

Reputation: 33474

I am from .net background. However, java/c# are more/less same.

If you instantiate a non-primitive type (array in your case), it won't be null.
e.g. int[] numbers = new int[3];
In this case, the space is allocated & each of the element has a default value of 0.

It will be null, when you don't new it up.
e.g.

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

Upvotes: 4

objects
objects

Reputation: 8677

An int array is initialised with zero so it won't actually ever contain nulls. Only arrays of Object's will contain null initially.

Upvotes: 3

Mike
Mike

Reputation: 2435

Look at its length:

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

Though it's safer to check for null at the same time:

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

Upvotes: 24

unwind
unwind

Reputation: 399833

An int array without elements is not necessarily null. It will only be null if it hasn't been allocated yet. See this tutorial for more information about Java arrays.

You can test the array's length:

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

Upvotes: -1

Related Questions