追根朔源java中的集合的toString__List的toString

來源:互聯網
上載者:User
首先有這樣一個問題:

List<String> list = new ArrayList<String>();list.add("zhangsan");list.add("lisi");System.out.println(list);
那麼這樣列印的結果會是什麼那。

[zhangsan, lisi]

那麼問題來了,‘[]’是從哪裡來的那。

我們知道,所有的對象在重寫了Object類的toString()方法之後,才會輸出對象的資訊。否則輸出的則是類似cn.edu.lnu.test.Box@15db9742這種東西,這是什麼。是類的‘全類名@hashcode’,我們來看看Object的源碼:

package java.lang;/** * Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, * including arrays, implement the methods of this class. * * @author  unascribed * @see     java.lang.Class * @since   JDK1.0 */public class Object {     public native int hashCode();
    public String toString() {        return getClass().getName() + "@" + Integer.toHexString(hashCode());    }}
由此,我們可以得出結論,自訂的類只有重寫了Object的toString()方法才會列印出對象的內容。

所以我們猜想:List介面肯定重寫了Object的toString();興緻沖沖地去看了源碼,發現:

並沒有。。。


那究竟是怎麼回事那。

看看java中集合的關係就知道了,上圖:





原來是AbstractCollection重寫了toString()方法。至此,所有的迷霧揭開了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.