Reputation: 7840
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
Reputation: 1
Assuming column is "array" type.
size(col(x))===0 will filter out all empty arrays (arrays with size/length=0).
Upvotes: 0
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
Reputation: 141
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
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
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
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
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
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
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
Reputation: 4096
ArrayUtils.isNotEmpty(testArrayName)
from the package org.apache.commons.lang3
ensures Array is not null or empty
Upvotes: 150
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
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
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
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
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
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