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() ????????????????
------解决方案--------------------
是this Collection不是this connection
list = [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
------解决方案--------------------
2楼的哥们已经从逻辑说明原因了,具体的代码可以看下面的代码
Vector的toString方法是super.toString(),而具体执行的方法
- Java code
/** * 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(", "); } }