黑马程序员技术交流社区
标题:
关于println的一点事,与大家分享一下
[打印本页]
作者:
刘先斌
时间:
2014-4-2 22:07
标题:
关于println的一点事,与大家分享一下
今天在给论坛里的同学回答输出语句的时候,我也同样搞懂了点关于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方法。
class test {
public static void main(String[] args) {
A a = new A();
System.out.println(a);
}
}
class A
{
public String toString()
{
System.out.println("toString");
return "";
}
}
复制代码
运行结果是:
toString
我总结了一下各种参数的println方法的经过路径。如下:这是我的理解。有错误的请大神指正。。
1.jpg
(18.88 KB, 下载次数: 5)
下载附件
2014-4-2 22:06 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2