关于java集合的toString方法源码分析

在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()方法而已.

    原文作者:java集合源码分析
    原文地址: https://blog.csdn.net/tianyuConqueror/article/details/79720240
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞