一直很纳闷 为什么 每次输出自定义对象输出的就是所有的属性和属性值,而输出集合却只输出了集合中 用来存放元素的那个数组的值,后来我想肯定是toString()的问题,看了AbstractCollection中toString()的源码,发现toString是从iterator的next()拿的值,然后又找到了AbstractList&Itr 这个类,发现AbstractList中Iteritor()方法返回的是一个Itr对象,然后又看了一眼Itr的next()方法,发现每调用一次next方法,它就会调用get方法来获取指定索引位元素的值,get方法底层是通过for循环拿的。最终我理解之所以打印集合只拿出它的一个属性值 是因为他的最底层是通过遍历这个数组然后拿到指定元素,通过get()方法它就能利用for循环拿到这个元素,然后next()内部是调用get的。toString里面又是通过迭代器的next来拿值,然后拼接成字符串的。所以迭代器迭代出来值都是通过for循环遍历存放元素的数组拿来的。这也就不难理解为什么输出集合仅仅是集合中的一个属性的值了。
本人属于小白,以上解释仅供参考,如有错误,欢迎提出。 看源码看晕乎了。