import java.util.Arrays;
import java.util.List;
public class ArraysDemo {
public static void main(String[] args) {
// Arrays.asList(T... a)
int[] data = {1, 2, 3};
List list = Arrays.asList(data);
System.out.println("list size = " + list.size()); //1
/**
* 上一行代码会输出:list size = 1,而不是3。原因是在Arrays.asList(T... a)
* 其接收的参数类型是泛型可变参数的。而基本数据类型是不能作为泛型的参数的。
* 按道理应该使用包装类型,但这里没有报错??
* 因为数组是可以泛型化的,所以转换后在List中就有一个类型为int的数组。
*
* 总结:该方法对于基本数据类型的数组支持的不够好,当数组是基本数据类型时不建议使用。
*/
System.out.println(list.get(0).getClass());
System.out.println("-----------------------------");
Integer[] values = {1, 2, 3, 4};
List<Integer> listVal = Arrays.asList(values);
System.out.println("listVal size = " + listVal.size());
listVal.set(0, 8); //更新操作
for(Integer in : listVal){
System.out.print(in + " ");
}
listVal.add(5); // java.lang.UnsupportedOperationException
/**
* 执行add()方法会发生异常,查看源码可以知道这里的ArrayList并不是java.util.ArrayList了,
* 而是Arrays中的私有静态内部类,并没有提供add方法。
* 所以除非确信array.aslist后长度不会增加,否则谨慎使用。
*/
}
}
API中对asList(T... a)方法的说明
Arrays类中部分源码截图
类之间继承关系图
「更多精彩内容请关注公众号geekymv,喜欢请分享给更多的朋友哦」