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

  • 相关阅读:
    Android与js交互实例
    动态规划-最长公共子序列
    android调用js
    比特币不是虚拟货币,这是一个真实世界----李笑来
    Linux进程同步之POSIX信号量
    编程至死第0天
    JMX操作ActiveMQ(2)
    Oracle层次查询和with函数的使用
    boost::asio async_write也不能保证一次发完所有数据 一
    解决Eclipse一直loading workbench无法启动的问题
  • 原文地址:https://www.cnblogs.com/Evil-Rebe/p/4869687.html
Copyright © 2011-2022 走看看