ArrayList list1 = new ArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");ArrayList list2 = new ArrayList();list2 = list1;//赋值一下
list1.clear();//清除第一个
System.out.println("list2 = " + list2);
我不明白的是,为什么第二个arraylist是new出来的,却还和第一个用一个地址。
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");ArrayList list2 = new ArrayList();list2 = list1;//赋值一下
list1.clear();//清除第一个
System.out.println("list2 = " + list2);
我不明白的是,为什么第二个arraylist是new出来的,却还和第一个用一个地址。
或者这样吧,就可以解决了。
list2.add(ctype(list(i),Integer))
------ ------
|list1 |----> | A1 | A1是第一个new出来的ArrayList
|list2 |----> | A2 | A2是第二个new出来的ArrayList
| (栈) | | (堆) |
------ ------
然后list2 = list1
------ ------
|list1 |----> | A1 | list2就指向了A1
|list2 |/ | A2 |
| (栈) | | (堆) |
------ ------
声明了一个ArrayList的引用变量list2,并将从new返回的那个对象的地址覆给了list2
list2 = list1;
又将list1的值覆给了list2,这时list1与list2的值是一样的,都是第一个new出来的ArrayList的地址
通俗一点就list1与list2指向了同一个对象
改变list1指向的对象,就是改变list2指向的对象
list2重新指向了一个地址了~~~
所以list2清空相当于把堆地址中数据都清空了。list1和list2共享的一个对地址,有不清楚。