arrayList拷贝方式
//方式一
List<Integer> l2 = new ArrayList<>(l1);
//方式二
List<Integer> l2 = new ArrayList<>();
l2.addAll(l1);
//方式三
List<Integer> l2 = new ArrayList<>();
Collections.copy(l2,l1);
//错误方式。只是把l2指向l1的引用地址。
List<Integer> l2 = new ArrayList<>();
l2 = l1;
以上都是浅拷贝
浅拷贝:所拷贝对象中的元素,只是拷贝了引用。所引用的对象值发生改变,两个list都会发生改变。
注意:Integer,String等是不可变类(final类),改变其值其实是新建了一个对象,并指向该对象。
ArrayList<Integer> l1 = new ArrayList<>();
Integer integer = new Integer(4);
l1.add(integer);
ArrayList<Integer> l2 = new ArrayList<>(l1);
System.out.println(l1); //4
System.out.println(l2); //4
integer = 333;
System.out.println(l1); //4
System.out.println(l2); //4
l1.add(integer);
System.out.println(l1); //4,333
System.out.println(l2); //4