gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:40:36 26 4
gpt4 key购买 nike

我创建了一个 class Testclass Pair 对象存储在库中定义的链表数据结构中。为了打印 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() 方法有疑问-

  • 打印链接列表时内部发生了什么?
  • 如果我将一些整数存储在链表中,是否会调用 Integer 类的 toString() 方法?

最佳答案

执行LinkedList<E>.toString()继承自 AbstractCollection<E> ;这是documented像这样:

Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]"). Adjacent elements are separated by the characters ", " (comma and space). Elements are converted to strings as by String.valueOf(Object).

所以 String.valueOf在每个元素上调用 - 依次调用 Object.toString()对于任何非空元素。在你的情况下,你已经在 Pair 中覆盖了它,所以这就是所谓的。

如果在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() 中调用 Integer 覆盖。)

关于java - (this) 覆盖 LinkedList 类的 tostring 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57546665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com