ホームページ > Java > &#&チュートリアル > プリミティブ配列を使用した Java の Arrays.asList() メソッドの制限と予期しない動作は何ですか?

プリミティブ配列を使用した Java の Arrays.asList() メソッドの制限と予期しない動作は何ですか?

Linda Hamilton
リリース: 2024-12-21 12:32:09
オリジナル
861 人が閲覧しました

What are the Limitations and Unexpected Behaviors of Java's Arrays.asList() Method with Primitive Arrays?

Arrays.asList() の動作と制限

Java では、Arrays.asList() メソッドは配列から変更不可能なリストを作成します。値の配列を渡すのに便利な varargs 引数をサポートしています。ただし、プリミティブ配列型で Arrays.asList() を使用すると、予期しない結果が生じる可能性があります。

次のコードを考えてみましょう。

float[] floatArray = {1.0f, 2.0f, 3.0f};
List<Float> floatList = Arrays.asList(floatArray); // Works

int[] intArray = {1, 2, 3};
List<Integer> intList = Arrays.asList(intArray); // Incorrect
ログイン後にコピー

最初の例では、Arrays.asList() は正常にListそして float 値を Float オブジェクトにオートボックス化します。ただし、2 番目の例では、Arrays.asList(intArray) は List ではなく、List を生成します。

予期しない動作はなぜですか?

Java ジェネリックはプリミティブ型をサポートしません。代わりに、Integer や Float などのラッパー クラスを使用してこれらの値を表します。 Arrays.asList() がプリミティブ配列で呼び出されると、対応するラッパー クラスのリストを作成しようとします。ただし、Listがないので、 (int はプリミティブであるため)、デフォルトは List です。

修正方法

List を取得するには Arrays.asList() を使用して int[] から取得するには、まずプリミティブ値を同等のラッパー クラスにボックス化する必要があります。これは、Integer.valueOf() などのラッパー クラスによって提供される静的メソッドを使用して実行できます。

intArray = {1, 2, 3};
Integer[] intObjects = new Integer[intArray.length];
for (int i = 0; i < intArray.length; i++) {
    intObjects[i] = Integer.valueOf(intArray[i]);
}
List<Integer> intList = Arrays.asList(intObjects); // Correct
ログイン後にコピー

配列でオートボクシングが機能しない理由

オートボクシングは配列全体ではなく、個々のプリミティブにのみ適用されます。たとえば、式 Integer.valueOf(intArray) は、intArray のすべての要素を Integer オブジェクトにオートボックス化しません。代わりに、コンパイル時エラーが発生します。

代替解決策

あるいは、プリミティブ配列をラッパーのリストに変換するメソッドを提供する他のライブラリを使用することもできます。クラス。たとえば、Guava ライブラリは、プリミティブ int[] を List にラップする Ints.asList() メソッドを提供します。

以上がプリミティブ配列を使用した Java の Arrays.asList() メソッドの制限と予期しない動作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート