ArrayList list = new ArrayList(); // 第一次扩容 for (int i = 0; i < 10; i++) { list.add(i); } ArrayList list1 = list; for (int i = 0; i < 5; i++) { list1.add(i); } System.out.println(list.toString()); System.out.println(list1.toString()); System.out.println(list.equals(list1));
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4] true
发现list1和list输出的内容是一样的,这种方法只是将list的地址赋值给list1,他们都是操作同一块地址,相当于list。
而希望的赋值时把值传给list1,这个ArrayList和之前list完全是两个不同(分别指向不同的地址),正确的做法:
List <String> list1 = new ArrayList<String>(); //方法一:利用集合自带的构造方法 List<String> list2= new ArrayList<String>(list1); //方法二:利用克隆的方法进行赋值 List<String> list2 =(ArrayList<String>) list1.clone();