黑马程序员技术交流社区

标题: 直接打印对象调用toString方法呢? [打印本页]

作者: fxtahe    时间: 2018-5-6 20:10
标题: 直接打印对象调用toString方法呢?
今天在类的继承学习中老师重写了toString方法,后来在调用过程中发现,直接打印对象,就会获得对象的信息,下例

当我们在测试类中打印Student对象会发现
```java
public class PersonTest {
        public static void main(String[] args) {
                System.out.println(new Student());
                Student st = new Student("wei", "man", 20, "china", "qinghua", "002");
                System.out.println(st);
        }
}
```
直接调用了`toString()`方法。

这使我产生了很大的疑问,
`System.out.println()`是怎么调用`toString`方法的?  
后来去网上查找了资料才知道。

Systeme类中的out字段是标准输出流,out是static PrintStream类型的,PrintStream类有println函数,其重载形式有参数是Object的

查找API文档后发现有这个方法:
```java
public void println(Object x)
    打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。

```
  
打印对象是调用了`String.valueOf(x)`方法。查找文档
```api
public static String valueOf(Object obj)
    打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。

    返回 Object 参数的字符串表示形式。
    参数:
        obj - 一个 Object
    返回:
        如果参数为null,则字符串"null";否则,返回 obj.toString() 的值。
```
作者: 鱼帅    时间: 2018-5-7 00:35
没看懂要说什么。

作者: 奥斯托洛夫斯基    时间: 2018-8-9 17:32

作者: O-limin    时间: 2018-8-9 17:35

作者: 项老师    时间: 2018-8-9 17:37

作者: TomGe    时间: 2018-8-9 17:39

作者: 天亮1    时间: 2018-8-9 17:41

作者: hguilin    时间: 2018-8-9 17:55
6666
作者: shengweiyun    时间: 2018-8-9 18:12
         
作者: 黑马啸西风    时间: 2018-8-9 18:41

作者: wishyouwerehere    时间: 2018-8-9 18:50

作者: 合肥黑马9期    时间: 2018-8-9 18:56

作者: 鸟语花香    时间: 2018-8-10 09:59

作者: ZC971227    时间: 2018-8-14 11:20
很棒,加油
作者: 曹瑞银    时间: 2018-8-14 11:21

作者: ms1249615386    时间: 2018-8-14 11:21
写的不错
作者: pfjava6    时间: 2018-8-14 11:23
继续努力,写的很不错
作者: 595156223    时间: 2018-8-14 11:24
沙发
作者: 595156223    时间: 2018-8-14 11:24
沙发
作者: 日常空大    时间: 2018-8-14 11:29
确实不错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2