解决方案 »

  1.   

    将 System.out.println(list); 
    修改为 System.out.println(list1 + " " + list); 看的会清晰一些
    [a] [[a]]
    list1 包含一个元素 a,打印结果为[a],
    list 包含一个元素list1,打印结果就是[[a]] 了。
    list的父类AbstractCollection重写了toString方法,让list的元素打印出来为[ ] 包括的。public String toString() {
            Iterator<E> it = iterator();
            if (! it.hasNext())
                return "[]";        StringBuilder sb = new StringBuilder();
            sb.append('[');
            for (;;) {
                E e = it.next();
                sb.append(e == this ? "(this Collection)" : e);
                if (! it.hasNext())
                    return sb.append(']').toString();
                sb.append(',').append(' ');
            }
        }
      

  2.   


    不好意思  是我问题没问清楚, 我意思是为什么不是打印的"[ ]" ,0   ,  以一般的理解list1是后面才赋值的。你的代码没怎么看懂, 是在list集合打印的时候,需要是遍历里面的所有元素么。
      

  3.   

    你创建了两个集合,然后给list1添加了一个元素“a”,又把list1的全部元素添加到了list里面,所以你输出list的时候当然会输出一个元素“a”呀。至于后面a等于0的问题,额有什么疑问么?int 是值数据类型,先给a赋0,改变b的值并不会影响a的值,所以a仍然是0。我想楼主你纠结的是这两种数据类型的问题吧。
      

  4.   

    List list = new ArrayList();
    List list1 = new ArrayList();
    list.add(list1); // list 中添加了元素list1,list中的第一个元素指向了list1的内存地址
     list1.add("a"); // 给list1 的内存地址中添加了一个元素a,下面再打印的时候,自然就打印出list1 中的a 了 int b=0;
    int a=b; // 将b的值赋给a,此时a 的值为0
    b=8; // 再改变b的值,不会影响到a的值
      

  5.   

    list.add(list1);
           list1.add("a");其实,你创了建的ArrayList是完全不同的
    list.add(list1); 实际是ArrayLIst<ArrayLIst> list = new ArrayList<ArrayList>();
    list1.add("a");          实际是 ArrayList<String> list1 = new ArrayList<String>();
      

  6.   


    不好意思  是我问题没问清楚, 我意思是为什么不是打印的"[ ]" ,0   ,  以一般的理解list1是后面才赋值的。你的代码没怎么看懂, 是在list集合打印的时候,需要是遍历里面的所有元素么。
    4楼已经给出具体回答了,我再补充下。楼主的写法中,第8行是往集合里添加String对象,而第10~12行是对变量赋值,结果当然不是[ ] ,0  。
      

  7.   

    List 是引用类型,引用类型的赋值只是地址的赋值,这点跟基本类型不一样。
      

  8.   

    List里面是Object数组实现的,里面有Object[]的引用List list = new ArrayList();
    List list1 = new ArrayList();
    list.add(list1);你把list1加入到list里面,说明是list里面的数组引用指向了list1的数组引用,当list1里面加入值了,list里面也就有值了int b=0;
    int a=b;
    b=8;你把a的值给b,a,b都等于0,然后你又让b指向8,a的指向是不变的,所以还是0public class Student {
    public String name;
    public static void main(String[] args) {
    Student s1 = new Student();
    s1.name = "s1";
    Student s2 = s1;
    s2.name = "s2";
    System.out.println(s1.name);
    }
    }这个你明白吗?