問題描述:
List<String> list=new ArrayList<String>();
list.add("張三");
list.add("李四");
list.add("王五");
System.out.println(list.toString());
結果輸出:
[張三, 李四, 王五]
從結果我們會發現,不難發現,從第二個數據開始,每個數據的前面多了一個空格字符。
問題查找:
首先我們來看看ArrayList的定義:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
在我們ArrayList中我們並沒有看到toString的具體實現。我們猜測,這個toString方法應該是從AbstractList類中繼承而來的。而AbstractList中也並沒有toString方法。
繼續向上看AbstractList的定義:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
我們在AbstractCollection類中,發現了toString方法。來看看AbstractCollection中的toString的實現:
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(' ');
}
}
從代碼中,我們確實可以看到,在toString方法中有一個.append(' ')來拼接了一個空格字符進去。所以我們在使用list.toString()方法的時候,出現了空格。