问题描述
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()方法的时候,出现了空格。
本文深入探讨了Java中ArrayList的toString()方法实现细节,揭示了为何在输出元素时会出现额外的空格,以及这一现象背后的源码分析。
181





