集合的toString()方法原始碼解析

小峰峰瘋瘋的發表於2016-02-29
程式碼:
    Collection c = new ArrayList();
    c.add("hello");
    c.add("world");
    c.add("java");

    System.out.println(c);

為什麼c輸出的不是地址值呢?
    A:Collection c = new ArrayList();
        這是多型,所以輸出c的toString()方法,其實是輸出ArrayList的toString()
    B:看ArrayList的toString()
        而我們在ArrayList裡面卻沒有發現toString()。
        以後遇到這種情況,也不要擔心,你認為有,它卻沒有,就應該去它父親裡面看看。
    C:toString()的方法原始碼

        public String 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())
                    //[hello, world, java]
                    return sb.append(']').toString();
                sb.append(',').append(' ');
            }
        }

相關文章