Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens une exception ClassCastException lors de la conversion d'un tableau d'objets en un tableau d'entiers en Java ?

Pourquoi est-ce que j'obtiens une exception ClassCastException lors de la conversion d'un tableau d'objets en un tableau d'entiers en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 13:00:02894parcourir

Why Do I Get a ClassCastException When Casting an Object Array to an Integer Array in Java?

Casting d'un tableau d'objets en tableau d'entiers : une énigme ClassCastException

Dans le domaine de la programmation Java, la conversion d'un tableau d'un type en un autre peut conduisent souvent à la confusion, en particulier lorsqu'il s'agit de tableaux de primitives et d'objets. Examinons de plus près l'extrait de code suivant :

<code class="java">Object[] a = new Object[1];
Integer b = 1;
a[0] = b;
Integer[] c = (Integer[]) a;</code>

Lorsque vous tentez d'exécuter ce code, vous pouvez rencontrer une ClassCastException à la dernière ligne. Pourquoi est-ce ainsi ?

Le problème réside dans les types de tableaux incompatibles. Integer[] est un sous-type de Object[], ce qui signifie qu'un tableau d'entiers peut être attribué en toute sécurité à un tableau d'objets. Cependant, l’inverse n’est pas vrai. Object[] ne peut pas être traité comme Integer[].

Pour résoudre ce problème, vous ne pouvez pas simplement convertir le tableau Object en un tableau Integer. Au lieu de cela, vous pouvez utiliser les méthodes Arrays.copyOf() ou Arrays.copyOfRange() pour créer explicitement un nouveau tableau d'entiers avec le contenu souhaité.

<code class="java">// Using Arrays.copyOf()
Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class);

// Using Arrays.copyOfRange()
Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);</code>

Vous pouvez également déclarer un tableau d'entiers à partir du dès le départ et attribuez-le au tableau Object :

<code class="java">Object[] a = new Integer[1];
Integer b = 1;
a[0] = b;</code>

Dans ce scénario, aucune ClassCastException ne se produira.

Ainsi, pour réussir à convertir un tableau Object en un tableau Integer, il est impératif d'utiliser les méthodes appropriées ou assurez-vous que le tableau Object ne contient que des entiers.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn