Course – Black Friday 2025 – NPI EA (cat= Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Partner – Orkes – NPI EA (cat=Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag=Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Partner – Orkes – NPI EA (cat=Java)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Course – Black Friday 2025 – NPI (cat=Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

1. Overview

In Java, arrays are a fundamental part of the language, providing a structured way to store multiple values of the same type. However, when working with arrays and type casting, we sometimes encounter unexpected runtime exceptions.

One such issue arises when we attempt to cast an Object[] array to a specific array type, such as Integer[]. This results in a ClassCastException, which can confuse many of us.

In this tutorial, we’ll explore why this happens, understand the underlying mechanics of Java arrays, and learn how to avoid such errors in our code.

2. Introduction to the Problem

As usual, let’s first understand the issue through an example:

Integer[] convertObjectArray() {
    Object[] objArray = new Object[3];
    objArray[0] = 1;
    objArray[1] = 2;
    objArray[2] = 3;
    return (Integer[]) objArray;
}

We inserted three int values into an Object[] array in the above method. Since the Object[] array only contains integers, we attempt to convert it to an Integer[] array.

We can call this method in a test to see what will happen:

Exception ex = assertThrows(ClassCastException.class, () -> convertObjectArray());
LOG.error("The exception stacktrace:", ex);

As we can see, calling this method raises ClassCastException. Also, in the output, we can see the exception details:

java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.Integer; ...
     at ...
     at ...
     ...

The message is pretty straightforward. It says we cannot cast the Object[] array to an Integer[] array, although all elements in the array are Integers. Next, let’s understand why this issue occurs.

3. Why Does This Exception Occur?

To understand why this happens, we need to examine the behavior of arrays in Java, particularly array covariance and runtime type checking.

Covariance means that a subclass type can be substituted for its parent type in certain situations. In Java, arrays are covariant, meaning that an array of a subclass (Integer[]) can be assigned to an array of its superclass (Object[]).

This feature allows us to do something like this:

Object[] objArray = new Integer[5]; // Valid, because Integer[] is a subtype of Object[]
objArray[0] = 42; // Allowed, since 42 is an Integer

However, this doesn’t mean we can freely cast Object[] to Integer[]. The actual array type remains Object[], and Java doesn’t allow treating it as Integer[] at runtime.

Therefore, this attempt fails:

(Integer[]) objArray

At this point, Java checks if objArray is actually an Integer[]. Since its actual runtime type is Object[], the cast fails, resulting in a ClassCastException.

4. Resolving the Issue

Now that we understand why the problem occurs, let’s figure out how to solve it.

4.1. Using an Integer[] Array Directly

The best way to avoid this issue is to initialize an array with the correct type from the beginning. In our example, instead of creating an Object[] array, we can create an Integer[] array if we plan to store Integer values:

Integer[] getIntegerArray() {
    Integer[] intArray = new Integer[3];
    intArray[0] = 1;
    intArray[1] = 2;
    intArray[2] = 3;
    return intArray;
}

A simple test can verify it works as expected:

assertArrayEquals(new Integer[] { 1, 2, 3 }, getIntegerArray());

Initializing an array with the desired type saves unnecessary conversions. However, we often receive Object[] arrays from other libraries or APIs. In this case, we cannot initialize the array from the beginning. Next, let’s see how to convert an Object[] array to an Integer[] array.

4.2. Stream-Based Conversion

We can leverage Stream API to convert Object[] to Integer[]:

Integer[] objArrayToIntArrayByStream() {
    Object[] objArray = new Object[] { 1, 2, 3 };
    Integer[] intArray = Stream.of(objArray).toArray(Integer[]::new);
    return intArray;
}

In this example, toArray(Integer[]::new) collects the elements from the stream into a new Integer[] array. Let’s test it:

assertArrayEquals(new Integer[] { 1, 2, 3 }, objArrayToIntArrayByStream());

This approach does the job, but we must be careful with type safety. We need to ensure that all elements in the Object[] are Integer instances. Otherwise, we may encounter ClassCastException when it converts any non-Integer element to Integer.

4.3. Loop-Based Conversion

Alternatively, we can easily convert an Object[] array to an Integer[] array by a for loop:

Integer[] objArrayToIntArray() {
    Object[] objArray = new Object[]{ 1, 2, 3 };
    Integer[] intArray = new Integer[objArray.length];
    for (int i = 0; i < objArray.length; i++) {
        intArray[i] = (Integer) objArray[i];
    }
    return intArray;
}

This method solves the problem by reading each element from the Object[] array and adds it to the target Integer[] array in a loop:

assertArrayEquals(new Integer[] { 1, 2, 3 }, objArrayToIntArray());

Similarly, if Object[] contains non-Integer elements, ClassCastException may raise.

4.4. Creating a Generic Conversion Method

We can extend the loop-based conversion method to a generic method, so that we can convert an Object[] array to any typed array (T[]). Next, let’s look at how to implement such a method:

<T> T[] convertFromObjectArray(Class<T> clazz, Object[] objArray) {
    T[] targetArray = (T[]) Array.newInstance(clazz, objArray.length);
    for (int i = 0; i < objArray.length; i++) {
        if (clazz.isInstance(objArray[i])) {
            targetArray[i] = clazz.cast(objArray[i]);
        } else {
            throw new ClassCastException("Element #" + i + ": Cannot cast " + objArray[i].getClass()
              .getName() + " to " + clazz.getName());
        }
    }
    return targetArray;
}

In this implementation, we first initialized a generic array. Then, we explicitly check each element before casting and throw a well-defined ClassCastException with a clear message.

Now, we can use this method to convert an Object[] to an array of different types:

assertArrayEquals(new Integer[] { 1, 2, 3 }, convertFromObjectArray(Integer.class, new Object[] { 1, 2, 3 }));
assertArrayEquals(new String[] { "I'm Kai", "I'm Liam", "I'm Kevin" },
  convertFromObjectArray(String.class, new Object[] { "I'm Kai", "I'm Liam", "I'm Kevin" }));

Of course, in case the input Object[] array contains elements in mixed types, the ClassCastException will be thrown:

Exception ex = assertThrows(ClassCastException.class, () -> convertFromObjectArray(String.class, new Object[] { "I'm Kai", Instant.now(), "I'm Kevin" }));
assertEquals("Element #1: Cannot cast java.time.Instant to java.lang.String", ex.getMessage());

As the test shows, the ClassCastException has a meaningful message, which helps debug and identify which specific element caused the issue.

5. Conclusion

In this article, we’ve discussed why the ClassCastException is raised when casting Object[] to Integer[] in Java. We also explored a few approaches to solving this issue through examples.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.
Course – Black Friday 2025 – NPI EA (cat= Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Partner – Orkes – NPI EA (cat = Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag = Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

Course – Black Friday 2025 – NPI (All)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

eBook Jackson – NPI EA – 3 (cat = Jackson)