在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方法的更多相关文章

  1. 怎么不让控制台system.out.println()打印

    1.System类有一个public static void setOut(PrintStream out)方法,你可以调用这个方法将out重定向到任何一个全局PrintStream对象上: 2.如果 ...

  2. Proxy代理对象是如何调用invoke()方法的.

    直奔主题,不说废话.先看java使用Proxy创建代理对象的代码. //一个开发者接口public interface Developer { String code(); void debug(); ...

  3. [原]toString()方法的复写作用, 以及打印集合.

    java中的每个类的根都是Object的子类. 必然有拥有了Object的所有方法. 在package java.lang.Object源码中: public String toString() { ...

  4. 【转】Java基础:System.out.println与System.err.println的区别

    同时使用了System.out.println与System.err.println()打印输入内容,结果看到的内容和预想的不一样,顺序与预料的不同并不是因为err和out的区别导致,而是因为他们是两 ...

  5. java中的system.out.println()和JSP中out.println()差别

    out.println()输出到client.     在out.println()中,out是response的实例.是以response为对象进行流输出的,即将内容输出到client.假设在JSP ...

  6. JSP中System.out.println()与out.println()区别

    1.out.println()输出到客户端. 在out.println()中,out是response的实例,是以response为对象进行流输出的,即将内容输出到客户端. 如果在JSP页面中使用Sy ...

  7. System.out.println()相关源码

    System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...

  8. 灵魂拷问:你真的理解System.out.println()执行原理吗?

    原创/朱季谦 灵魂拷问,这位独秀同学,你会这道题吗?  请说说,"System.out.println()"原理...... 这应该是刚开始学习Java时用到最多一段代码,迄今为止 ...

  9. 声明数组变量/// 计算所有元素的总和/打印所有元素总和/输出/foreach循环/数组作为函数的参数/调用printArray方法打印

    实例 下面是这两种语法的代码示例: double[] myList; // 首选的方法 或 double myList[]; // 效果相同,但不是首选方法 创建数组 Java语言使用new操作符来创 ...

随机推荐

  1. DigitalOcean VPS简介

    DigitalOcean是一家位于美国的云主机服务商,总部位于美国纽约,成立于2012年.由于价格低廉,高性能配置.灵活布置的优势,近些年来发展迅猛,成为中国站长圈们喜爱的品牌.(访问http://w ...

  2. C#第五天

    引用命名空间快捷键:Shift + Alt +F10: 值类型和引用类型: 区别: 1,值类型和引用类型在内存上存储的地方不一样: 2.在传递值类型和传递引用类型的时候,传递的方式不一样.值类型我们称 ...

  3. PureLayout

    PureLayout 是 iOS & OS X Auto Layout 的终极 API——非常简单,又非常强大.PureLayout 通过一个全面的Auto Layout API 扩展了 UI ...

  4. C++ 空类默认产生的类成员函数

    C++的空类有哪些成员函数:. 缺省构造函数.. 缺省拷贝构造函数.. 缺省析构函数.. 缺省赋值运算符.. 缺省取址运算符.. 缺省取址运算符 const.     注意:有些书上只是简单的介绍了前 ...

  5. javaWEB总结(4):ServletContext对象方法

    前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔. 1.什么是ServletC ...

  6. applicationhost.config web.config

    在 IIS7 8两个版本中, 用户的配置,可以通过修改如上的配置文件来完成 applicationhost.config ,可以定义全局的 用户自己目录下的web.config,可以自己定义 但是,有 ...

  7. mysql常用命令使用技巧

    一.连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root - ...

  8. Chapter 2 Open Book——4

    I walked to Biology with more confidence when, by the end of lunch, he still hadn't showed. 经过中午饭之后我 ...

  9. 第三十九节,python内置全局变量

    vars()查看内置全局变量 以字典方式返回内置全局变量 #!/usr/bin/env python # -*- coding:utf8 -*- print(vars()) #输出 # {'__bui ...

  10. golang vs java

    http://programmers.stackexchange.com/questions/83780/how-fast-can-go-go In terms of language design, ...