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
予期しない動作はなぜですか?
Java ジェネリックはプリミティブ型をサポートしません。代わりに、Integer や Float などのラッパー クラスを使用してこれらの値を表します。 Arrays.asList() がプリミティブ配列で呼び出されると、対応するラッパー クラスのリストを作成しようとします。ただし、List
修正方法
List を取得するには
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
以上がプリミティブ配列を使用した Java の Arrays.asList() メソッドの制限と予期しない動作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。