java中為什麼列印char陣列輸出是值,而其他是地址值
阿新 • • 發佈:2019-01-26
首先println方法對陣列的處理是先轉化為String型別,我們可以進入println原始碼看一下,我是建立了一個String陣列進去看了下
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
首先他都轉化成了String,然後進入print方法
接下來我們再進入write方法public void print(String s) { if (s == null) { s = "null"; } write(s); }
那我們看看char陣列的write方法private void write(String s) { try { synchronized (this) { ensureOpen();//確認輸出流是否打開了 textOut.write(s);//就是一個bufferWriter,寫入到緩衝區 textOut.flushBuffer();//重新整理快取區 charOut.flushBuffer();//OutputStreamWriter if (autoFlush && (s.indexOf('\n') >= 0)) out.flush();//這裡就是與char陣列的卻別,他直接把String s重新整理到了控制檯的輸出流中,但是記住他沒有和toString方法相關聯 } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } }
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(); } } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } }
其實這是第二次遇到這問題了,但是之前沒有非常明白,這裡弄清楚記錄一下,也供大家參考一下