String[] array = {"a","b","c"};
//List<String> list = Arrays.asList(array);//这么写到后边的add()代码是会抛出操作异常的,因为通过asList的方法得到的list是只读的 ①
List<String> list = new ArrayList<String>(Arrays.asList(array));//这样是可以add的 ②
list.add("d");
//array=(String [])list.toArray();//采用 ① 处的写法,直接把数组的元素给了list,类似于动物类型的引用list指向子类羊array数组,实质是羊,这里把本质为羊的动物Object[]数组 转换为羊数组,这里没问题;如果是②处的写法,新建了一个ArrayList对象,list指向新对象而并不是实质数组,然后这里的list的toArray()返回的Object[] 类型的数组并不是由之前的String[]数组向上转型或类似的做法得到,即这里的toArray()返回的Object[]数组不是实质是String[]数组,会报类型转换异常。
注:
例1: Animal animal = new Sheep(); sheep = (sheep)animal; √
例2: wolf = (wolf)sheep; ×
例3: wolf = (wolf)animal; ×
array=list.toArray(new String[10]);//这样写则①②都是可以的,即把list的元素给了新建的String数组。
总结,下面的都是正确的:
String[] array = {"a","b","c"};
List<String> list = new ArrayList<String>(Arrays.asList(array));
list.add("d");
array=list.toArray(new String[10]);
------------------------------------------------------
String[] array = {"a","b","c"};
List<String> list = Arrays.asList(array);
array=(String [])list.toArray();
array=list.toArray(new String[10]);
以上。