List list = new ArrayList();
List vector= new Vector();
 
list.add(1);
list.add(2);
vector.add(3);
vector.add(4);
list.add(vector);
System.out.println(list);
vector.addAll();      //??为什么不能用add()方法
System.out.println(vector);
//输出结果很有意思,但我不明白为什么
//最后一个输出结果如下:1,2,3,4,this connection()//怎么会有this connection() ????????????????

解决方案 »

  1.   

    vector.addAll()哪里的方法??jdk1.7吗??
      

  2.   

    this Collection不是this connectionlist = [1,2];
    vector=[3,4];
    list.add(vector);//将vector加入list
    list=[1, 2, [3, 4]]
    vector.addAll(list);//list里面已经包含了vector,此时再将list添加到vector,可以简单理解为死循环了。
    vector=[3, 4, 1, 2, (this Collection)]=[3, 4, 1, 2, [3, 4, 1, 2, [3, 4, 1, 2, (this Collection)]]]
    其实this Collection就是vector
      

  3.   

    2楼的哥们已经从逻辑说明原因了,具体的代码可以看下面的代码
    Vector的toString方法是super.toString(),而具体执行的方法/**
         * Returns a string representation of this collection.  The string
         * representation consists of a list of the collection's elements in the
         * order they are returned by its iterator, enclosed in square brackets
         * (<tt>"[]"</tt>).  Adjacent elements are separated by the characters
         * <tt>", "</tt> (comma and space).  Elements are converted to strings as
         * by {@link String#valueOf(Object)}.
         *
         * @return a string representation of this collection
         */
        public String toString() {
            Iterator<E> i = iterator();
    if (! i.hasNext())
        return "[]"; StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = i.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! i.hasNext())
    return sb.append(']').toString();
        sb.append(", ");
    }
        }具体的sb.append(e == this ? "(this Collection)" : e);添加了this Collection这个字符串