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方法的经过路径。如下:这是我的理解。有错误的请大神指正。。









无标题.jpg (28.34 KB, 下载次数: 17)

路径

路径

评分

参与人数 1技术分 +2 收起 理由
滔哥 + 2

查看全部评分

2 个回复

倒序浏览
支持原创分享
回复 使用道具 举报

呵呵,多谢,一起进步.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马