猿问

(this) 覆盖 LinkedList 类的 tostring 方法如何工作?

我在库中定义的链表数据结构中创建了一个class Test存储对象。class Pair为了打印Pair类对象,我在对类中重写了方法,它的工作原理如下所示 -


import java.util.LinkedList;


class Test{

    static LinkedList<Pair> list=new LinkedList<Pair>();

    public static void main(String[] args){

        list.add(new Pair(31,78));

        list.add(new Pair(89,67));

        list.add(new Pair(90,43));


        System.out.println(list);

    }

}


class Pair{

    int x;

    int y;

    Pair(int m, int n){

        x=m;

        y=n;

    }

    @Override

    public String toString(){

        return "{ "+ this.x + ", " +this.y+" }";

    }

}

输出 -


[{ 2, 4 }, { 6, 3 }, { 12, 6 }]

我的疑问是关于toString()方法-


当我打印 Linked List 时内部会发生什么?

如果我将一些整数存储在链表中,是否会调用 Integer 类的 toString() 方法?


泛舟湖上清波郎朗
浏览 148回答 3
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。)

慕无忌1623718

对象类是否使用结束类的 toString() 方法进行打印不,该println方法调用list对象toString()方法。有LinkedList一个toString()实现调用toString()列表中所有对象的方法来构建字符串[item1, item2, ...]。这当然意味着您的toString()方法是由 调用的LinkedList,而不是由Object类调用的。如果我将一些整数存储在链表中,是否会调用Integer类方法?toString()是的。

ITMISS

正如您所看到的源代码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方法。
随时随地看视频慕课网APP

相关分类

Java
我要回答