当使用System,out.println()打印一个对象是自动调用toString方法

Posted shangwufeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当使用System,out.println()打印一个对象是自动调用toString方法相关的知识,希望对你有一定的参考价值。

原文链接:https://www.cnblogs.com/Evil-Rebe/p/4869687.html

在Java中,所有的对象都是继承自Object,自然继承了toString方法,在当使用System,out.println()里面为一个对象的引用时,自动调用toString方法讲对象打印出来。如果重写了tostring方法则调用重写的toString 方法。

因为System.out.println()的这个方法源码中调用了String.valueOf(Objec o),
public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }
而String.valueOf(x)的源码就是去调用该对象的toString()方法,源码如下:
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

  

例如一下例子(同事注意String  StringBuilder 以及StringBuffer的区别。以下使用的是StringBuilder)。

import java.util.Random;


public class UsingStringBuilder {
public static Random random = new Random(47);
public String toString() {
StringBuilder result = new StringBuilder("[");
for(int i=0;i<25;i++) {
result.append(random.nextInt(100));
result.append(",");
}
result.delete(result.length()-2, result.length());
result.append("]");
return result.toString();
}
public static void main(String[] args) {
UsingStringBuilder u = new UsingStringBuilder();
System.out.println(u);
}
}

 输出结果:[58,55,93,61,61,29,68,0,22,7,88,28,51,89,9,78,98,61,20,58,16,40,11,22,]

以上是关于当使用System,out.println()打印一个对象是自动调用toString方法的主要内容,如果未能解决你的问题,请参考以下文章

Java 使用嵌套 for 循环打印皇冠

java反射调用System.out.println实现控制台打印

Java 中 System.out.println() 的字符限制

java中System.out.println()打印输出结果

tomcat没有打印system.out.println()

System.out.println 不打印到控制台