我们在写代码的过程中,经常用到 list 和 map 的 toString 方法,但 list 和 map 的源码和 api 上的 list 和 map 中并没有重写 toString( ) 方法,为什么可以直接打印呢?
为了知道答案,可以设个断点,然后一步步执行(eclipse 环境下)就可以知道答案了.

一、List 中常用的ArrayList的toString() 继承了abstract class AbstractCollection 这个类:
public String toString()
    {
        Iterator iterator1 = iterator();
        if(!iterator1.hasNext()){
            return "[]";
            }
        StringBuilder stringbuilder = new StringBuilder();
        stringbuilder.append('[');
        do
        {
            Object obj = iterator1.next();
            stringbuilder.append(obj != this ? obj : "(this Collection)");
            if(!iterator1.hasNext())
                return stringbuilder.append(']').toString();
            stringbuilder.append(", ");
        } while(true);
    }
二、Map 中常用的 HashMap 的 toString( )继承与 abstract class AbstractMap 这个类
public String toString()
    {
        Iterator iterator = entrySet().iterator();
        if(!iterator.hasNext()){
            return "{}";
            }
        StringBuilder stringbuilder = new StringBuilder();
        stringbuilder.append('{');
        do
        {
            Map.Entry entry = (Map.Entry)iterator.next();
            Object obj = entry.getKey();
            Object obj1 = entry.getValue();
            stringbuilder.append(obj != this ? obj : "(this Map)");
            stringbuilder.append('=');
            stringbuilder.append(obj1 != this ? obj1 : "(this Map)");
            if(!iterator.hasNext())
                return stringbuilder.append('}').toString();
            stringbuilder.append(", ");
        } while(true);
    }

希望对您有所帮助。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐