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