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


    在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,]

  • 相关阅读:
    zr#955 折纸
    zr#954 分组
    p2513 [HAOI2009]逆序对数列
    p4161 [SCOI2009]游戏
    p4593 [TJOI2018]教科书般的亵渎
    622FThe Sum of the k-th Powers
    spoj1811 LCS
    后缀自动机
    p5342 [TJOI2019]甲苯先生的线段树
    p5339 [TJOI2019]唱、跳、rap和篮球
  • 原文地址:https://www.cnblogs.com/Evil-Rebe/p/4869687.html
Copyright © 2020-2023  润新知