1. 程式人生 > >為什麼只有字元陣列可以這樣輸出?

為什麼只有字元陣列可以這樣輸出?

在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
[[email protected]
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是BufferedWriter物件,代表著向控制檯輸出資訊的輸出流物件.charOut是OutputStreamWriter物件,是用來將位元組轉換成字元的轉換流物件.textOut包裝了charOut.
textOut.write(buf);呼叫到以下方法:
 public void write(char cbuf[]) throws IOException {
        write(cbuf, 0, cbuf.length);
    }
該方法就是將char陣列的每個字元挨個輸出到控制檯中啦.
總結一句話,其System.out.println(c);就是將c陣列的每個字元挨個輸出到控制檯中.

其他語句類似這樣分析。