首先有這樣一個問題:
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()方法。至此,所有的迷霧揭開了。