Core Java

Check Array Is Null or Empty Example

1. Introduction

An array is a data structure that holds a fixed number of elements with the same data type. In Java, an array object can be null. When an array is created for object types, e.g. String, Integer, Long, or any other custom data class, the default value for each element is null unless explicitly initialized. To prevent a NullPointerException, we should do the null check before accessing an object. In this example, I will demonstrate an array check null or empty in a Java example.

2. Setup

In this step, I will create a maven project with both Junit5 and Apache Commons Libraries.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>Check_Array_Demo</groupId>
	<artifactId>Check_Array_Demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<release>17</release>
				</configuration>
			</plugin>
		</plugins>

	</build>

	<dependencies>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<version>5.11.0</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<version>5.11.0</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.17.0</version>
		</dependency>

	</dependencies>
</project>

3. Array Check Null or Empty

In this step, I will create a CheckArrayUtils.java class to check if a given int or String array is empty or null.

CheckArrayUtils.java

package org.zheng.demo;

public class CheckArrayUtils {

	public boolean isEmpty(int[] intArray) {
		return intArray == null || intArray.length == 0;
	}

	public boolean isEmpty(String[] stringArray) {
		return stringArray == null || stringArray.length == 0;
	}

	public boolean isNull(int[] intArray) {
		return intArray == null;
	}

	public boolean isNull(String[] stringArray) {
		return stringArray == null;
	}

}

In order to show the test method’s execution time in nanoseconds, I will create a NanosecondsTimeExtension.java which prints out the execution time in nanoseconds.

NanosecondsTimeExtension.java

package org.zheng.demo;

import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

public class NanosecondsTimeExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback {

	private static final String START_TIME = "startTime";

	@Override
	public void afterTestExecution(ExtensionContext context) throws Exception {
		ExtensionContext.Store store = context.getStore(ExtensionContext.Namespace.GLOBAL);
		long startTime = store.remove(START_TIME, long.class);
		long endTime = System.nanoTime();
		long execTimeInNS = (endTime - startTime);
		System.out.println(context.getDisplayName() + " took " + execTimeInNS + " Nanoseconds");
	}

	@Override
	public void beforeTestExecution(ExtensionContext context) throws Exception {
		ExtensionContext.Store store = context.getStore(ExtensionContext.Namespace.GLOBAL);
		store.put(START_TIME, System.nanoTime());
	}

}

4. Test Int Array Check Null or Empty

In this step, I will create a TestCheckIntArray.java class which has five test methods to check array null or empty for an integer array via ArrayUtils, ObjectUtils, and the native Java language.

TestCheckIntArray

package org.zheng.demo;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.stream.IntStream;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(NanosecondsTimeExtension.class)
class TestCheckIntArray {
	int[] emptyArray = {};
	int[] intArray = IntStream.generate(() -> 1000).limit(1000).toArray();
	int[] nullArray = null;

	private CheckArrayUtils testClass = new CheckArrayUtils();

	@Test
	void test_ApacheArrayUtils_isEmpty() {
		assertTrue(ArrayUtils.isEmpty(nullArray));
		assertTrue(ArrayUtils.isEmpty(emptyArray));
		assertFalse(ArrayUtils.isEmpty(intArray));
	}

	@Test
	void test_ApacheObjectUtils_isEmpty() {
		assertTrue(ObjectUtils.isEmpty(nullArray));
		assertTrue(ObjectUtils.isEmpty(emptyArray));
		assertFalse(ObjectUtils.isEmpty(intArray));
	}

	@Test
	void test_emptyCheck() {
		assertTrue(testClass.isEmpty(nullArray));
		assertTrue(testClass.isEmpty(emptyArray));
		assertFalse(testClass.isEmpty(intArray));
	}

	@Test
	void test_nullCheck() {
		assertTrue(testClass.isNull(nullArray));
		assertFalse(testClass.isNull(emptyArray));
		assertFalse(testClass.isNull(intArray));
	}

	@Test
	void test_nullPointerException() {
		assertThrows(NullPointerException.class, () -> {
			System.out.println("  emptyArray size is " + emptyArray.length);
			System.out.println("  never print out due to NullPointerException" + nullArray.length);
		});

	}

}
  • Line 23: test_ApacheArrayUtils_isEmpty checks if an array is empty via Apache ArrayUtils.isEmpty method.
  • Line 30: test_ApacheObjectUtils_isEmpty checks if an array is empty via Apache ObjectUtils.isEmpty method.
  • Line 37: test_emptyCheck checks if an array is empty via testClass.isEmpty method.
  • Line 44: test_nullCheck checks if an array is null via testClass.isNull method.
  • Line 51: test_nullPointerException verifies NullPointerException is thrown when accessing null.

Execute the test and capture the output:

TestCheckIntArray Results

test_ApacheObjectUtils_isEmpty() took 14467400 Nanoseconds
  emptyArray size is 0
test_nullPointerException() took 4456900 Nanoseconds
test_nullCheck() took 232100 Nanoseconds
test_ApacheArrayUtils_isEmpty() took 4904600 Nanoseconds
test_emptyCheck() took 203000 Nanoseconds
  • Line 4, 6 – the native null and empty check methods have better performance than Apache ObjectUtils and ArrayUtils methods.

5. Test String Array Check Null or Empty

In this step, I will create a TestCheckStringArray.java class which is similar to the TestCheckIntArray.java created in step 4.

TestCheckStringArray.java

package org.zheng.demo;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(NanosecondsTimeExtension.class)
class TestCheckStringArray {
	String[] emptyArray = {};
	String[] letterArray = { "a,", "b", "C", "d", "Z" };
	String[] nullArray = null;

	private CheckArrayUtils testClass = new CheckArrayUtils();

	@Test
	void test_ApacheArrayUtils_isEmpty() {
		assertTrue(ArrayUtils.isEmpty(nullArray));
		assertTrue(ArrayUtils.isEmpty(emptyArray));
		assertFalse(ArrayUtils.isEmpty(letterArray));
	}

	@Test
	void test_ApacheObjectUtils_isEmpty() {
		assertTrue(ObjectUtils.isEmpty(nullArray));
		assertTrue(ObjectUtils.isEmpty(emptyArray));
		assertFalse(ObjectUtils.isEmpty(letterArray));
	}

	@Test
	void test_emptyCheck() {
		assertTrue(testClass.isEmpty(nullArray));
		assertTrue(testClass.isEmpty(emptyArray));
		assertFalse(testClass.isEmpty(letterArray));
	}

	@Test
	void test_nullCheck() {
		assertTrue(testClass.isNull(nullArray));
		assertFalse(testClass.isNull(emptyArray));
		assertFalse(testClass.isNull(letterArray));
	}

	@Test
	void test_nullPointerException() {
		assertThrows(NullPointerException.class, () -> {
			System.out.println("  emptyArray size is " + emptyArray.length);
			System.out.println("  never print out due to NullPointerException" + nullArray.length);
		});

	}

}

Execute the test and capture the output:

TestCheckStringArray Results

test_ApacheObjectUtils_isEmpty() took 12847300 Nanoseconds
  emptyArray size is 0
test_nullPointerException() took 5099400 Nanoseconds
test_nullCheck() took 199900 Nanoseconds
test_ApacheArrayUtils_isEmpty() took 4829600 Nanoseconds
test_emptyCheck() took 138100 Nanoseconds

Capture both tests’ results with the following screenshot.

Array Check Null Empty Test Results
Figure 1 Junit Test Results

6. Conclusion

In this example, I created a simple Java class to check if a given integer or String array is null or empty. I tested the methods with Junit as well as the ObjectUtils.isEmpty and ArrayUtils.isEmpty methods from Apache Common Library. As you can see from the test results, the native methods have better performance.

7. Download

This was an example of a maven project which includes an array check null or empty features.

Download
You can download the full source code of this example here: Check Array Is Null or Empty Example

Mary Zheng

Mary graduated from the Mechanical Engineering department at ShangHai JiaoTong University. She also holds a Master degree in Computer Science from Webster University. During her studies she has been involved with a large number of projects ranging from programming and software engineering. She worked as a lead Software Engineer where she led and worked with others to design, implement, and monitor the software solution.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button