您的位置:首页 > 编程语言 > Java开发

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

2018-03-27 22:18 447 查看
在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()方法而已.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: