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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 13:00:02783ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。