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
Libérer: 2024-10-31 13:00:02
original
899 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal