【Java踩坑記】——ArrayList的toString()

問題描述:

        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()方法的時候,出現了空格。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章