3 回答

TA貢獻1951條經(jīng)驗 獲得超3個贊
實現(xiàn)LinkedList<E>.toString()繼承自AbstractCollection<E>;記錄如下:
返回此集合的字符串表示形式。字符串表示形式由集合元素的列表組成,這些元素按照其迭代器返回的順序排列,括在方括號(“[]”)中。相鄰元素由字符", "(逗號和空格)分隔。元素按 轉換為字符串String.valueOf(Object)。
SoString.valueOf在每個元素上調用 - 這反過來將調用Object.toString()任何非空元素。在你的情況下,你已經(jīng)覆蓋了它Pair,所以這就是所謂的。
如果你添加一些 logging in Pair.toString,像這樣:
public String toString(){
? ? String ret = "{ "+ this.x + ", " +this.y+" }";
? ? System.out.println("toString called: returning " + ret;
? ? return ret;
}
...你可以看到它被調用(或者你可以使用調試器)。是的,如果列表包含整數(shù),則列表的字符串表示形式將是“[1, 2, 3, 4, 5]”或其他任何內容。(它可能String.valueOf被優(yōu)化為直接處理數(shù)字類型,但邏輯上它會調用toString()override in Integer。)

TA貢獻1744條經(jīng)驗 獲得超4個贊
對象類是否使用結束類的 toString() 方法進行打印
不,該println
方法調用list
對象toString()
方法。
有LinkedList
一個toString()
實現(xiàn)調用toString()
列表中所有對象的方法來構建字符串[item1, item2, ...]
。
這當然意味著您的toString()
方法是由 調用的LinkedList
,而不是由Object
類調用的。
如果我將一些整數(shù)存儲在鏈表中,是否會調用
Integer
類方法?toString()
是的。

TA貢獻1871條經(jīng)驗 獲得超8個贊
正如您所看到的源代碼toString在這里:
? ? public String toString() {
? ? ? ? Iterator<E> it = iterator();
? ? ? ? if (! it.hasNext())
? ? ? ? ? ? return "[]";
? ? ? ? StringBuilder sb = new StringBuilder();
? ? ? ? sb.append('[');
? ? ? ? for (;;) {
? ? ? ? ? ? E e = it.next();
? ? ? ? ? ? sb.append(e == this ? "(this Collection)" : e);
? ? ? ? ? ? if (! it.hasNext())
? ? ? ? ? ? ? ? return sb.append(']').toString();
? ? ? ? ? ? sb.append(',').append(' ');
? ? ? ? }
? ? }
現(xiàn)在我們需要找出添加usingStringBuilder時的作用e.append()
? ? @Override
? ? public StringBuilder append(Object obj) {
? ? ? ? return append(String.valueOf(obj));
? ? }
現(xiàn)在的問題是,做什么String.valueOf?
? ? public static String valueOf(Object obj) {
? ? ? ? return (obj == null) ? "null" : obj.toString();
? ? }
所以你的問題的答案是:是的,它會調用Integer的toString方法。
添加回答
舉報