Arrays.asList() 是将数组作为列表。
问题来源于:
public class Test { public static void main(String[] args) { int[] a = {1, 2, 3, 4}; List list = Arrays.asList(a); System.out.println(list.size()); //1 } }
期望的输出是 list 里面也有4个html" target="_blank">元素,也就是 size 为4,然而结果是1。
原因如下:
在 Arrays.asList 中,该方法接受一个变长参数,一般可看做数组参数,但是因为 int[] 本身就是一个类型,所以 a 变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是 int 数组,所以 size 为 1,相当于是 List 中数组的个数。基本类型是不能作为泛型的参数,按道理应该使用包装类型,但这里缺没有报错,因为数组是可以泛型化的,所以转换后在 list 中就有一个类型为 int 的数组。
/** * Returns a fixed-size list backed by the specified array. (Changes to * the returned list "write through" to the array.) This method acts * as bridge between array-based and collection-based APIs, in * combination with {@link Collection#toArray}. The returned list is * serializable and implements {@link RandomAccess}. * * <p>This method also provides a convenient way to create a fixed-size * list initialized to contain several elements: * <pre> * List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); * </pre> * * @param a the array by which the list will be backed * @return a list view of the specified array */ @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。)此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的。
所以,如果是创建多个列表,在传参数时候,最好使用 Arrays.copyOf(a) 方法,不然,对列表的更改就相当于对数组的更改。
public class Test { public static void main(String[] args) { Integer[] a = {1, 2, 3, 4}; List list = Arrays.asList(a); System.out.println(list.size()); //4 } }
最后提醒,如果 Integer[] 数组没有赋值的话,默认是 null,而不是像 int[] 数组默认是 0。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍java 源码分析Arrays.asList方法详解,包括了java 源码分析Arrays.asList方法详解的使用技巧和注意事项,需要的朋友参考一下 最近,抽空把java Arrays 工具类的asList 方法做了源码分析,在网上整理了相关资料,记录下来,希望也能帮助读者! Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List 。
本文向大家介绍Java Arrays.AsList原理及用法实例,包括了Java Arrays.AsList原理及用法实例的使用技巧和注意事项,需要的朋友参考一下 java.util.Arrays的asList方法可以方便的将数组转化为集合,我们平时开发在初始化ArrayList时使用的比较多,可以简化代码,但这个静态方法asList()有几个坑需要注意: 一. 如果对集合使用增加或删除元素的操作
本文向大家介绍Java clone方法详解及简单实例,包括了Java clone方法详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 Java clone方法详解 什么是"clone"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个
本文向大家介绍Java 方法签名详解及实例代码,包括了Java 方法签名详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看到的朋友也可看下, 方法签名的意义 对于同名不同类、同类不同名的方法,方法签名的意义并不是很大,但是对于重载方法来说,方法签名的意义
本文向大家介绍java 工厂方法详解及实例代码,包括了java 工厂方法详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 工厂方法概述 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。 优点 客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强
本文向大家介绍Java中的泛型方法详解及简单实例,包括了Java中的泛型方法详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 java 泛型方法: 泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:public class Test<T>{}。这样就定义了一个泛型类Test,在实例化该类时,必须指明泛型T的具体类型,例如:Test<Object> t = new T