Java でオブジェクト配列を整数配列にキャストすると ClassCastException が発生するのはなぜですか?

Patricia Arquette
リリース: 2024-10-31 13:00:02
オリジナル
845 人が閲覧しました

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

オブジェクト配列を整数配列にキャストする: ClassCastException の難問

Java プログラミングの領域では、ある型の配列を別の型にキャストすることができます。特にプリミティブやオブジェクトの配列を扱う場合、混乱を招くことがよくあります。次のコード スニペットを詳しく見てみましょう:

<code class="java">Object[] a = new Object[1];
Integer b = 1;
a[0] = b;
Integer[] c = (Integer[]) a;</code>
ログイン後にコピー

このコードを実行しようとすると、最後の行で ClassCastException が発生する可能性があります。なぜそうなるのでしょうか?

問題は、配列の型に互換性がないことにあります。 Integer[] は Object[] のサブタイプであり、整数の配列をオブジェクトの配列に安全に割り当てることができることを意味します。ただし、その逆は当てはまりません。 Object[] を Integer[] として扱うことはできません。

この問題を修正するには、単に Object 配列を Integer 配列にキャストするだけでは済みません。代わりに、Arrays.copyOf() メソッドまたは Arrays.copyOfRange() メソッドを利用して、目的の内容を含む新しい整数配列を明示的に作成できます。

<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>
ログイン後にコピー

あるいは、整数の配列を宣言することもできます。まず、それを Object 配列に割り当てます。

<code class="java">Object[] a = new Integer[1];
Integer b = 1;
a[0] = b;</code>
ログイン後にコピー

このシナリオでは、ClassCastException は発生しません。

したがって、Object 配列を Integer 配列に正常にキャストするには、適切なメソッドを使用するか、オブジェクト配列に整数のみが含まれていることを確認してください。

以上がJava でオブジェクト配列を整数配列にキャストすると ClassCastException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!