程序
import java.util.ArrayList;
import java.util.List;public class ArrayListTest {


public static void main(String[] args){
try{
List aa = new ArrayList();
List bb = new ArrayList();
bb.add("11");
bb.add("22");
aa.add(bb);
bb = new ArrayList();
bb.add("33");
bb.add("44");
aa.add(bb);
for(int i=0,cnt1=aa.size();i<cnt1;i++){
bb = (ArrayList)aa.get(i);
for(int j=0,cnt2=bb.size();j<cnt2;j++){
System.out.println("bb:"+bb.get(j).toString());
}
}
}catch(Exception e){
System.out.println("已运行 ArrayListTest:"+e);
}
}}
输出结果
bb:11
bb:22
bb:33
bb:44import java.util.ArrayList;
import java.util.List;public class ArrayListTest {


public static void main(String[] args){
try{
List aa = new ArrayList();
List bb = new ArrayList();
bb.add("11");
bb.add("22");
aa.add(bb);
bb.clear();
bb = new ArrayList();
bb.add("33");
bb.add("44");
aa.add(bb);
bb.clear();
for(int i=0,cnt1=aa.size();i<cnt1;i++){
bb = (ArrayList)aa.get(i);
for(int j=0,cnt2=bb.size();j<cnt2;j++){
System.out.println("bb:"+bb.get(j).toString());
}
}
}catch(Exception e){
System.out.println("已运行 ArrayListTest:"+e);
}
}}
这段程序在把bb放入aa之后做了一个clear。结果就什么结果都没输出。bb.size()的值总是0。这是为什么?我是在bb放入aa之后做的clear啊。按说bb的值应该已经放入aa了。为啥运行结果是什么都没有呢。请高手指点一下:)

解决方案 »

  1.   

     //clear() 方法源码 
    public void clear() {
    modCount++; // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null; size = 0;
        }
      

  2.   

    个人觉得应该是传引用的原因,最后我们输出东西的时候还是从创建的那个bb List里面拿东西的。被你clear了,就没有东西输出了。
      

  3.   

    嗯, aa.Add(bb)的时候,并非是将bb里面的元素逐一copy到aa里面,而是将bb所指向的引用加了进去,当bb.clear()后,再去取的话就没有东西了。
      

  4.   

    aa.add(bb); //把bb引用的对象的--引用--放到aa里了,但是这时候bb也是引用那个arrayList对象的.
    bb.clear(); //aa里有一个引用,bb也是一个引用,它们引用同一个对象ArrayList cc = null;
    cc=bb;//这里相当于aa.add(bb);让cc也引用这个对象.bb.clear();//这里清空了,那么cc的当前也是被空了,因为bb,cc都是引用同一个对象.cc.size();//也就是0了.等于aa.get(i).size也是0