![](/img/trans.png)
[英]How can I print this 2 Variables in the same println “System.out.println”
[英]How can println print an object
{
List list= new ArrayList();
list.add("one");
list.add("second");
System.out.println(list);
}
如何使用对象“列表”,就像在print语句中一样? 我们不需要使用该对象来访问打印列表的方法吗?
prinln(someObject)
将打印出someObject
的toString()
方法中实现的内容。
您可以使用(假设)toString()为所有对象实现:
System.out.println(list.toString())
请注意,您不应该将返回的字符串用作您实际可以解析的任何内容; 它真的是一个视觉表现。 它也不需要唯一地表示对象。
当你写作
System.out.println(list)
实际上,您是隐式使用toString()
方法。
返回此集合的字符串表示形式。 字符串表示由一个集合元素的列表组成,它们的迭代器返回它们的顺序,用方括号(“[]”)括起来。 相邻元素由字符“,”(逗号和空格)分隔。 通过String.valueOf(Object)将元素转换为字符串。
当我们将任何对象传递给println()方法时,它将隐式调用该对象的toString()方法。 所以,实际执行的是
System.out.println( list.toString() );
ArrayList继承自类java.util.AbstractCollection,该类具有toString()方法。 因此,在您的情况下,应该执行toString()。
toString()方法返回此集合的字符串表示形式。 字符串表示由一个集合元素的列表组成,它们的迭代器返回它们的顺序,用方括号(“[]”)括起来。 相邻元素由字符“,”(逗号和空格)分隔。 通过String.valueOf(Object)将元素转换为字符串。
看看你的问题和评论,我认为你的困惑最终源于你不确定印刷如何运作。 通常在这种情况下,我建议获取JDK源代码并简单地查看内部。
在这种情况下,我们首先转到System
类并检出out
成员(因为在System.out
上调用了println
):
public final class System {
...
public final static PrintStream out = null;
既然我们现在知道out
是一个PrintStream
,那么我们来看看那个类:
public class PrintStream extends FilterOutputStream
implements Appendable, Closeable
{
...
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
(我们知道它正在调用此方法,因为其他println
签名与类型List
不匹配)
好的,所以我们看到println
使用String.valueOf(Object)
将给定的Object
(在本例中为List
)转换为String
。 我们来看看这个方法:
public final class String {
...
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
所以现在我们知道List
的toString()
方法用于生成输出。 正如其他人所指出的那样,它在ArrayList
被覆盖以提供您看到的输出。
它可以像这样使用,因为类List继承了Object类,而Object类有toString()方法,这意味着每个对象都可以转换为String。
直接打印列表将给出列表的字符串表示。 如果要访问列表中的对象,则需要使用迭代器或循环或高级for循环来进行集合。 例如
for(String s : list){
System.out.println(s);
}
那么你可以学习并尝试所有列表方法来修改它。 例如,添加,删除。
此外,如果要打印对象,则会隐式调用toString()方法。
您可以遍历列表中的所有项目以将其打印出来。 你可以使用for循环的while循环来完成这个。
while (list.hasNext) {
System.out.println((String) list.next());
}
for(String i in list){
System.out.println(i) ;
不确定这是你想要的,但它是一个选项。
哟需要toString()方法。 当你打印对象Reference时,默认调用toString()方法。 如果你默认看到toString()方法,它会打印出来
getClass().getName() + '@' + Integer.toHexString(hashCode())
现在根据您的要求,您可以覆盖它以打印列表中的值(String Class也会覆盖它)
在这里你创建了List接口。所以它也允许在列表中添加重复值。我们也可以直接打印像System.out.println(obj)这样的对象; 在List类中,重写了toString方法,以便它将打印其所有内容而不是对象的地址。
的System.out.println(Arrays.toString(myList.toArray()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.