我们先来实践一下:
public class Main{
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);
System.out.println(list);
}
}
输出结果:
很显然是具体值。
为何呢?我们先来分析下源码:
点开List接口,art+7
没找到重写的toString()方法
再点开ArrayList类
翻来覆去,还是不见toString方法啊,这个时候估计有人疑惑了,没有重写toString(),那打印集合对象的时候不是执行的Object类中定义的toString()方法么?也就是输出的是对象的hashcode?
别急,我们再回来看看ArrayList类:
实现List接口,但同时也继承AbstractList类,点开AbstractList:
还是找不到toString()呀?
继续滑上去看AbstractList类:
实现List接口,继承AbstractCollection类,点开AbstractCollection:
终于找到重写的toString()方法了。
在对比这个重写的方式和最开始的输出结果,这个时候“ArrayList集合打印出来的是具体存储的值”就解释的通了。