3 回答
TA贡献1951条经验 获得超3个赞
实现LinkedList<E>.toString()继承自AbstractCollection<E>;记录如下:
返回此集合的字符串表示形式。字符串表示形式由集合元素的列表组成,这些元素按照其迭代器返回的顺序排列,括在方括号(“[]”)中。相邻元素由字符", "(逗号和空格)分隔。元素按 转换为字符串String.valueOf(Object)。
SoString.valueOf在每个元素上调用 - 这反过来将调用Object.toString()任何非空元素。在你的情况下,你已经覆盖了它Pair,所以这就是所谓的。
如果你添加一些 logging in Pair.toString,像这样:
public String toString(){
String ret = "{ "+ this.x + ", " +this.y+" }";
System.out.println("toString called: returning " + ret;
return ret;
}
...你可以看到它被调用(或者你可以使用调试器)。是的,如果列表包含整数,则列表的字符串表示形式将是“[1, 2, 3, 4, 5]”或其他任何内容。(它可能String.valueOf被优化为直接处理数字类型,但逻辑上它会调用toString()override in Integer。)
TA贡献1744条经验 获得超4个赞
对象类是否使用结束类的 toString() 方法进行打印
不,该println
方法调用list
对象toString()
方法。
有LinkedList
一个toString()
实现调用toString()
列表中所有对象的方法来构建字符串[item1, item2, ...]
。
这当然意味着您的toString()
方法是由 调用的LinkedList
,而不是由Object
类调用的。
如果我将一些整数存储在链表中,是否会调用
Integer
类方法?toString()
是的。
TA贡献1871条经验 获得超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(' ');
}
}
现在我们需要找出添加usingStringBuilder时的作用e.append()
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
现在的问题是,做什么String.valueOf?
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
所以你的问题的答案是:是的,它会调用Integer的toString方法。
添加回答
举报