在java中,大多数输出一个实例对象,就会输出它在堆空间的地址值.
但是集合输出的是字符串,以下是探究:
Collection<String> c = new ArrayList<String>();
c.add(“hello”);
c.add(“world”);
c.add(“java”);
System.out.println(c);
它的输出为:[hello, world, java]
为什么c输出的不是地址值呢?
A:Collection<String> c = new ArrayList<String>();
这是多态,所以输出c的toString()方法,其实是输出ArrayList的toString()
B:看ArrayList的toString()
而我们在ArrayList里面却没有发现toString()。这时就可以去它的父类中查看.
C:最终在它的顶层的类AbstractCollection<E>中找到了toString()的方法源码
Iterator<E> it = iterator(); //集合本身调用迭代器方法,得到集合迭代器
if (! it.hasNext())
return “[]”;
StringBuilder sb = new StringBuilder();
sb.append(‘[‘);
for (;;) {
E e = it.next(); //e=hello,world,java
sb.append(e == this ? “(this Collection)” : e);
if (! it.hasNext())
return sb.append(‘]’).toString();
sb.append(‘,’).append(‘ ‘);
}
其实,只是重写了toString()方法而已.