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

0 votes
asked Mar 3, 2010 by ankit-sachan

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

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

int[] k = new int[3];

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

8 Answers

0 votes
answered Jan 3, 2010 by unwind

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;
}
0 votes
answered Jan 3, 2010 by mike

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) { }
0 votes
answered Jan 3, 2010 by shahkalpesh

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");
}
0 votes
answered Jan 3, 2010 by objects

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

0 votes
answered Jan 4, 2010 by vickirk

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.

0 votes
answered Mar 3, 2010 by cletus

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;
  }
}
0 votes
answered Mar 3, 2015 by shravan-ramamurthy

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

0 votes
answered Jan 12, 2016 by hubbabubba

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.

Welcome to Q&A, where you can ask questions and receive answers from other members of the community.
Website Online Counter

...