A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天在给论坛里的同学回答输出语句的时候,我也同样搞懂了点关于System.out.println()这个输出语句的点问题。再次与大家分享一下。

System是一个不能被实例化的一个类,out是其的一个static字段,此外还有in,err等字段,这些字段都是static的。api中显示,out,err字段实际就是一个PrintStream类型的对象,
in字段实际就是一个InputStream类型的对象。


而println方法就是在PrintStream类中。
PrintStream类中的println方法有多种重载形式,
这些println方法接收的参数有空参数,boolean,char,char[],double,float,int,long,String,Object等,大家可以到api中查看,这里就不贴图了。
这些println方法会调用相同参数的print方法,print方法又会调用相同参数的String.valueOf,再下来,就会调用相同类型的toString方法将参数转换成字符串,而print就会将返回的字符串转换成字符再转换成字节,最后将字节通过write方法写入流而打印。有个别不会路径完全相同,会跳过一两步。
所以你在println中传入的参数大致会经过以下几个路径;
println----print----String.valueOf----toSring-----write写入流----打印。
大家可以通过重写其中的某个方法来验证一下。
下面有个例子可以说明走了toString方法。
  1. class test {
  2.         public static void main(String[] args) {
  3.                 A a = new A();
  4.                 System.out.println(a);
  5.         }
  6. }

  7. class A
  8. {
  9.         public String toString()
  10.         {
  11.                 System.out.println("toString");
  12.                 return "";
  13.         }
  14. }
复制代码

运行结果是:
toString


我总结了一下各种参数的println方法的经过路径。如下:这是我的理解。有错误的请大神指正。。





评分

参与人数 1黑马币 +1 收起 理由
钟成军 + 1 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马