zoukankan      html  css  js  c++  java
  • 当使用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,]

  • 相关阅读:
    Docker和k8s的区别与介绍
    NFS网络文件系统详解
    NFS文件系统及搭建NFS共享服务
    Tomcat 端口配置,及原理详解
    svn使用教程
    buff/cache内存占用过多
    关于xcode:如何在Objective-C中使用符号断点获取参数
    iOS开发消除编译警告
    建模的能力才是一个人和核心能力
    android sutdio 环境搭建
  • 原文地址:https://www.cnblogs.com/Evil-Rebe/p/4869687.html
Copyright © 2011-2022 走看看