為什麼只有字元陣列可以這樣輸出?
阿新 • • 發佈:2019-01-07
在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[])方法,見下面程式碼
textOut是BufferedWriter物件,代表著向控制檯輸出資訊的輸出流物件.charOut是OutputStreamWriter物件,是用來將位元組轉換成字元的轉換流物件.textOut包裝了charOut.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);
}
該方法就是將char陣列的每個字元挨個輸出到控制檯中啦.總結一句話,其System.out.println(c);就是將c陣列的每個字元挨個輸出到控制檯中.
其他語句類似這樣分析。