ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list);

ArrayList list2 = list;
list2.clear();
System.out.println(list); 
希望 list2.clear(); 执行后,System.out.println(list); 仍打印 1 2 3。

解决方案 »

  1.   

    没有啊,我就是想创建一个 list 的副本,对这个副本修改而不影响原来的实例。
      

  2.   

    list2.clear(); 执行后,System.out.println(list); 仍打印 1 2 3。
    这不可能啊 clear意思是清除数据
    在查看API后
    java.util 
    类 ArrayList<E>
    clear() 
              移除此列表中的所有元素。
    除非你覆盖这个方法或者在这个方法后面重新将
     list的值赋给list2 才能实现仍打印 1 2 3
      

  3.   

    是啊。所以 我是想创建一个 list 的副本,对这个副本list2修改而不影响原来的实例list。
      

  4.   

    我是想问 怎么创建一个 list 的副本list2,对这个副本list2修改而不影响原来的实例list。
    怎么复制? 直接 ArrayList list2 = list;  仍然是引用到list上。
      

  5.   

     
    将你原来代码中的  ArrayList list2 = list;
    换成:
     ArrayList list2 = new ArrayList(list);OK
    你那些做只是将引用list2指向list所指向的对象,当然list2被clear掉,实际是clear掉了两者所指向对象的元素了……
      

  6.   

    那你应该在new一个ArrayList 并将list的值赋给list2ArrayList list2 = list;这一句并没有创建一个新的实例
    而是将list2指向了list指向的那个实例 
    也就是说list2和list公用一个实例
    你清除其中一个(也就是清除了他们公用的那个实例)
    另一个肯定也受到同样的影响
      

  7.   

     ArrayList list2 = (ArrayList)list.clone();
      

  8.   

    那Set Map Stack 等等有这种传参数的构造方法吗? 我查查去
      

  9.   

    clone() 是复制对象用的?我过去没用过。。