toString 方法如何在不迭代循环的情况下显示整个对象列表?
How does the toString method display an entire list of objects without iterating a loop?
嗯,我现在开始研究Java,出现了下面的问题,如果我有一个对象列表,我重写toString方法,因为java可以显示所有列表中对象的值,无需使用某种 for ?
进行迭代
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<AB> p = new ArrayList<>();
p.add(new AB("tst1", 25));
p.add(new AB("tst2", 22));
System.out.println(p);
}
}
public class AB {
String name;
int age;
public AB(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " " + age;
}
}
所以我的问题是我实际上并没有单步执行对象,因为所有对象值都是使用 toString 显示的?
ArrayList
从 AbstractList
延伸,从 AbstractCollection
延伸,覆盖 toString
方法(在 Object
中定义)
然后遍历元素列表,调用它们的 toString
方法,最终生成 String
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(' ');
}
}
嗯,我现在开始研究Java,出现了下面的问题,如果我有一个对象列表,我重写toString方法,因为java可以显示所有列表中对象的值,无需使用某种 for ?
进行迭代import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<AB> p = new ArrayList<>();
p.add(new AB("tst1", 25));
p.add(new AB("tst2", 22));
System.out.println(p);
}
}
public class AB {
String name;
int age;
public AB(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " " + age;
}
}
所以我的问题是我实际上并没有单步执行对象,因为所有对象值都是使用 toString 显示的?
ArrayList
从 AbstractList
延伸,从 AbstractCollection
延伸,覆盖 toString
方法(在 Object
中定义)
然后遍历元素列表,调用它们的 toString
方法,最终生成 String
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(' ');
}
}