在java中,当我们定义一个字符数组想要输出时,可以直接在输出语句中写上它的应用即可,为什么可以这样呢?首先我们看一下下面的这个例子!
- package cn.edu.ahui;
- public class TestDemo {
- public static void main(String[] args){
- char[] c ={'a','b','c'};
- String s = new String("Leo");
- String[] s2 = {"aa","bb","cc"};
- System.out.println(c);
- System.out.println(c.toString());
- System.out.println(s);
- System.out.println(s.toString());
- System.out.println(s2);
- System.out.println(s2.toString());
- }
- }
这段代码的输出结果如下:
abc
[C@1db9742
Leo
Leo
[Ljava.lang.String;@106d69c
[Ljava.lang.String;@106d69c
从输出的结果我们可以看出,输出字符数组可以直接在输出语句中加上它的应用即可。我们从源码开始分析!
System.out.println(c);方法最终调用的是PrintStream类的write(char buf[])方法,见下面代码
- private void write(char buf[]) {
- try {
- synchronized (this) {
- ensureOpen();
- textOut.write(buf);
- textOut.flushBuffer();
- charOut.flushBuffer();
- if (autoFlush) {
- for (int i = 0; i < buf.length; i++)
- if (buf[i] == '\n')
- out.flush();
- }
- }
- }
textOut.write(buf);调用到以下方法:
- public void write(char cbuf[]) throws IOException {
- write(cbuf, 0, cbuf.length);
- }
总结一句话,其System.out.println(c);就是将c数组的每个字符挨个输出到控制台中.
其他语句类似这样分析。