首页 > Java > java教程 > Java 的 Arrays.asList() 方法对原始数组有哪些限制和意外行为?

Java 的 Arrays.asList() 方法对原始数组有哪些限制和意外行为?

Linda Hamilton
发布: 2024-12-21 12:32:09
原创
862 人浏览过

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

Arrays.asList() 行为和限制

在 Java 中,Arrays.asList() 方法从数组创建不可修改的列表。它支持可变参数参数,这可以方便地传递值数组。但是,将 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() 成功创建列表并将浮点值自动装箱为 Float 对象。但是,在第二个示例中,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 库提供了 Ints.asList() 方法,它将原始 int[] 包装到 List 中。

以上是Java 的 Arrays.asList() 方法对原始数组有哪些限制和意外行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板