深入理解List的toArray()方法和toArray(T[] a)方法
这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArray[T[] a]方法导出的是指定类型的数组。
下面是两个方法的申明及说明,摘自Java8的API文档。
toArray()方法
会返回List中所有元素构成的数组,并且数组类型是Object[]。还要注意一点就是,返回的数组是新生成的一个数组,
也就是说,多次运行toArray()方法会获得不同的数组对象(可以理解存储的数组对象内存地址不一样),但是这些数组对象中内容一样的。
也就是说,toArray()返回的数组是安全的,你可以对它进行任意的修改,其原因就是List不会去维持一个对该返回的数组的引用。
下面是对基本数据类型:Integer测试
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
Object[] objects1 = list.toArray();
Object[] objects2 = list.toArray();
//比较二个新数组
System.out.println("objects1 == objects2 : "+(objects1 == objects2));
//对object1 对象的数组进行修改 不会影响到其他 引用的数组
objects1[1]=4;
//输出修改后的 数组
System.out.println("show objects1: "+ Arrays.toString(objects1));
//输出引用的数组
System.out.println("show objects2: "+ Arrays.toString(objects2));
//输出原来的数组
System.out.println("show list: "+list);
}
输出结果:
objects1 == objects2 : false
show objects1: [1, 4]
show objects2: [1, 2]
show list: [1, 2]
可以看出确实toArray()返回的是一个新的数组对象地址,并且多次执行toArray()方法获得的是不同的数组对象,并且对其中一个数组进行修改,不会影响到其他toArray()方法获得的数组,并且也不会影响到list本身原来存储的元素值。
当我们list 换为其他类型对象的时候,也不影响
private static class People{
String name;
public People(String name){
this.name